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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏儒日 中级黑马   /  2012-7-31 23:55  /  2353 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

     一个类只能继承一个类,不支持多继承是因为如果一个类继承多个类,则多个父类中方法会发生重复,则子类在调用父类重复的方法时会发生问题,java虚拟机不知道调用哪个父类的方法。
   老毕视频里说,类与接口是实现关系,并且一个类继承一个类的同时可以实现多个接口。
    我的疑问是:假设类A继承类B的同时实现接口C和D,而接口C和D里面都有抽象方法show(),不同的是接口C的show()方法的返回值是int型,接口D的show()方法返回值是boolean型,则类A实现show()方法时怎么实现,返回值类型要怎么定义?此时虚拟机不会发生问题么?
  

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 老兄,去13期混去吧

查看全部评分

3 个回复

倒序浏览
一个类可以实现多个接口。接口之间可以多继承。但是其中全局常量不能同名,而且其中的函数不能造成继承后的编译混乱。比如两个接口,一个有void show(),一个有 int show();继承两个接口后,就会编译错误。
当然设计上不会出现同名的全局常量,也不会定义同名但返回值类型不同的方法。
回复 使用道具 举报
不管有没有分,我看到楼主的问题
和一楼的回复就真的淡定不了了
楼主的疑问很好,证明楼主用脑子想了,用心学了
但是有时候学习不能惯用脑子学,还要多动手。
你直接写上两个接口一个类实现一下
结果就不得而知了
楼上的回答很专业
但是有点答非所问
应该突出类实现接口的时候出现的同名函数,而不是接口的继承
其实接口的出现就是为了解决某些因扩展功能而产生的混乱
如果出现楼主说的那种情况,用类实现并复写show的话会出现错误
他会提醒你该类型与其中的一个show方法冲突
楼上说的设计上不会定义同名但返回值类型不同的方法
其实这个说的很好
方法是用来封装功能的
设计程序的时候方法名的定义也是要有一定意义的
不可能说你定义两个完全不一样的功能而起同一个名字
就算功能类似的定义同一个方法名也是需要有不同类型参数来控制的
当然带了不同的参数类型再实现就不会冲突了,那个是函数的重载
但是硬这么定义是不允许的,这是规则
回复 使用道具 举报
  1. interface IntefaceA {
  2. void methodA();
  3. int methodC();
  4. }
  5. interface IntefaceB {
  6. void methodB();
  7. boolean methodC();
  8. }


  9. class ClassAB implements IntefaceA,IntefaceB {


  10. public void methodB() {
  11. System.out.println("methodA");

  12. }


  13. public void methodA() {
  14. System.out.println("methodB");

  15. }


  16. public int methodC()
  17. {
  18. System.out.println("methodAC");

  19. }
  20. public boolean methodC()
  21. {
  22. System.out.println("methodBC");
  23. }

  24. public static void main(String[] args) {
  25. IntefaceA a = new ClassAB();
  26. a.methodA();
  27. a.methodC();

  28. IntefaceB b = new ClassAB();
  29. b.methodB();
  30. b.methodC();
  31. }
  32. }
复制代码
运行结果是

编译失败,可见是不能这么做的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马