A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵家阳 中级黑马   /  2012-9-17 17:13  /  1962 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵家阳 于 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中也有一个同名的方法,此时编译为什么没有报错?我该怎么理解?请高手指点!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
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()方法
}
}

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

点评

谢谢!  发表于 2012-9-18 21:31
回复 使用道具 举报
子类的show方法实现了接口类,也覆盖了父类.
回复 使用道具 举报
就当它都实现,因为下面代码能正常输出结果
  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可以省去,看着别扭
回复 使用道具 举报
对于子类覆盖父类的方法时建议加上@Override注解,很有用滴
回复 使用道具 举报
子类继承父类,同时继承父类的非私有属性及方法 ,方法是隐藏的,所以子类中也有父类的show()方法,但子类可以重写父类方法,自己的方法覆盖了父类的方法,同时自己的方法也实现了2个接口的方法,所以不报错是正确的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马