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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 匡文 于 2013-10-21 17:00 编辑

我知道java是只能单继承,但是上课老师说C++是多继承(我没学过C++,所以不知道C++的多继承是怎么实现的),那java为什么不采取多继承呢?为什么又要整出个接口来呢?java的单继承是优势还是劣势?求大神给小白我科普一下。。。。。

评分

参与人数 1技术分 +1 收起 理由
李江 + 1 勤学好问,加油哦~~

查看全部评分

9 个回复

倒序浏览
本帖最后由 周学彬 于 2013-10-18 21:26 编辑


Java语言中,多继承容易带来安全隐患:当多个父类中定义了相同功能,而且功能内容不同时,子类对象不确定要运行哪一个。不仅仅是方法有隐患,成员变量也有隐患。子类如果多继承,父类中有相同的成员变量,子类使用变量时也不确定是继承自那个父类。
但是java保留了这种多继承机制,并用另一种体现形式来完成表示,就是实现接口,java可以实现多个接口。因为接口中只有静态常量,定义的全是抽象方法。多实现时,如果要使用某个方法,子类必须自己实现,所以不会存在安全隐患。
java不支持多继承,虽然损失了程序的灵活性,但是程序的运行效率会因此提高。

C++的多继承中,有一个作用域运算符::,多继承时,如果出现了父类有相同的函数,使用作用域运算符指明是继承那个父类的方法就可以了。比如Parent::function();

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 很给力!

查看全部评分

回复 使用道具 举报
  1. class A
  2. {
  3.         void show()
  4.         {
  5.                 System.out.println("a");
  6.         }
  7. }
  8. class B
  9. {
  10.         void show()
  11.         {
  12.                 System.out.println("b");
  13.         }
  14. }

  15. class C extends A,B
  16. {}

  17. C c = new C();
  18. c.show();


  19. /*
  20. Java语言中:java只支持单继承,不支持多继承。

  21. 因为多继承容易带来安全隐患:当多个父类中定义了相同功能,但是功能内容不同时,子类对象不确定要运行哪一个。
  22. 但是java保留这种机制。并用另一种体现形式来完成表示。多实现。
  23. 所谓的多实现相当于是扩展子类的功能。这就要用到接口的知识。请看下面的程序。
  24. 这样即使实现的多个接口中出现相同的方法也没有关系,因为抽象方法并没有方法体。子类对接口中的方法进行复写。
  25. 想要什么功能就怎么复写。
  26. */

  27. interface InterA
  28. {
  29.         public static final int NUM = 3;
  30.         public abstract void show();
  31. }

  32. interface InterB
  33. {
  34.         public abstract void show();
  35. }

  36. class Demo
  37. {
  38.         public void function(){}
  39. }

  40. class Test extends Demo implements InterA,InterB
  41. {
  42.         public void show()
  43.         {
  44.                 System.out.println("haha");
  45.         }
  46. }

  47. //单继承说不上优势,也说不上劣势,但是的确保证了程序的安全性。另外,多实现就一定是一个优势!
  48. //子类可以扩展很多功能。
复制代码

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
java中的类只能是单继承的,接口可以多实现。
回复 使用道具 举报
对于你这个问题,我自己觉得

实现多继承和单继承的决定权都在程序语言的设计者和维护者手里
或者说,他们定义了编译的方法,定义了java虚拟机的执行方式
可能他们认为单继承相对于多继承更好,所以采用了单继承
并不是因为真的无法实现多继承,我想,他们也可以定义一个复杂的规则应对多继承
只是,那样可能让java变得不易学、易理解了
视频不也讲到了么,java从C还是什么演变而来,去掉了其中一些东西
大概就是为了让java更简洁
我猜测,接口的出现与现实生活的事物很相似,易于理解,使得语言更加好学习
毕老师讲课的视频不就说明了java其实和现实生活很相似吗?
毕老师那么多生动形象的例子,让java变得不那么抽象,更加容易理解

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
相比于C++的多继承,java只支持类的单继承,java中的所有类的共同基类是Object类,Object类java类树的唯一根节点,这种单继承有以下好处:

(1).单继承可以确保所有的对象拥有某种共同的特性,这样对于JVM虚拟机对所有的类进行系统级的操作将提供方便,所有的java对象可以方便地在内存堆栈中创建,传递参数也变的更加方便简单。

(2).java的单继承使得实现垃圾回收器功能更加容易,因为可以确保JVM知道所有对象的类型信息。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
雪人 中级黑马 2013-10-19 08:53:59
7#
单继承,多重实现接口
回复 使用道具 举报

如果楼主已经解惑,请将帖子改为提问结束
回复 使用道具 举报
To 金牌黑马 2013-10-20 19:07:31
9#
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马