黑马程序员技术交流社区

标题: 接口与类的不解! [打印本页]

作者: 赵家阳    时间: 2012-9-17 17:13
标题: 接口与类的不解!
本帖最后由 赵家阳 于 2012-9-18 21:31 编辑
  1. interface InterAA{
  2. public static final int num1 = 10;
  3. public static final double num2 = 20.20;
  4. public abstract void show();
  5. }
  6. interface InterBB{
  7. public abstract void show();
  8. }
  9. class Demo1{
  10. public void show(){
  11. System.out.println("类的继承");
  12. }
  13. }
  14. class ImpleDemo extends Demo1 implements InterAA,InterBB{
  15. public void show(){
  16. System.out.println(ImpleDemo.class);
  17. }
  18. }
  19. public class InterfaceDemo2 {
  20. public static void main(String[] args){
  21. ImpleDemo im = new ImpleDemo();
  22. im.show();
  23. }
  24. }
复制代码
疑惑:ImpleDemo在继承了Demo1类的同时,又实现了两个接口;接口有规定,接口中的抽象方法必须被重写,而父类Demo1中也有一个同名的方法,此时编译为什么没有报错?我该怎么理解?请高手指点!

作者: 程金    时间: 2012-9-17 17:21
子类的show方法实现了接口类,也覆盖了父类.
作者: 程振    时间: 2012-9-17 17:23
就当它都实现,因为下面代码能正常输出结果
  1. public class TestReader {
  2.         public static void main(String[] args) {
  3.                 ImpleDemo im = new ImpleDemo();
  4.                 im.show();
  5.                 InterAA A = im;
  6.                 InterBB B = im;
  7.                 A.show();
  8.                 B.show();
  9.         }
  10. }
复制代码
一般接口可以继承,你的实现可以更改InterAA extends InterBB,这样你就不用纠结了
另外,接口里面的方法本身就是抽象的,关键字abstract可以省去,看着别扭
作者: 程振    时间: 2012-9-17 17:25
对于子类覆盖父类的方法时建议加上@Override注解,很有用滴
作者: 严海荣    时间: 2012-9-17 17:31
子类继承父类,同时继承父类的非私有属性及方法 ,方法是隐藏的,所以子类中也有父类的show()方法,但子类可以重写父类方法,自己的方法覆盖了父类的方法,同时自己的方法也实现了2个接口的方法,所以不报错是正确的。
作者: 吴通    时间: 2012-9-18 16:30
InterAA和InterBB是两个接口,Demo1是一个父类
类ImpleDemo继承类Demo1实现两个接口InterAA,InterBB

interface InterAA{
public static final int num1 = 10;
public static final double num2 = 20.20;
public abstract void show();
}
interface InterBB{
public abstract void show();
}
class Demo1{
public void show(){
System.out.println("类的继承");
}
}
class ImpleDemo extends Demo1 implements InterAA,InterBB{
/*
父类继承了Demo1类还实现了接口InterAA和接口InterBB
我们看到父类Demo1和接口InterAA和InterBB以及子类 ImpleDemo
本身都有show()方法,当继承Demo1时,子类方法就覆盖了父类的
show()方法,再实现接口InterAA,由于接口中定义的是抽象的show()
方法,所以子类相当于补充了它的show()方法,实现InterBB接口也一样
所以最总的show方法还是子类自己的
*/
public void show(){
System.out.println(ImpleDemo.class);
}
}
public class InterfaceDemo2 {
public static void main(String[] args){
ImpleDemo im = new ImpleDemo();
im.show();  //实际上调用的就是子类的show()方法
}
}

代码中子父类方法主体相同,所以子类是复写父类的功能,所以编译能够通过,并不冲突。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2