黑马程序员技术交流社区
标题:
java为什么是单继承?单继承是优势还是劣势?
[打印本页]
作者:
匡文
时间:
2013-10-18 20:52
标题:
java为什么是单继承?单继承是优势还是劣势?
本帖最后由 匡文 于 2013-10-21 17:00 编辑
我知道java是只能单继承,但是上课老师说C++是多继承(我没学过C++,所以不知道C++的多继承是怎么实现的),那java为什么不采取多继承呢?为什么又要整出个接口来呢?java的单继承是优势还是劣势?求大神给小白我科普一下。。。。。
作者:
周学彬
时间:
2013-10-18 21:18
本帖最后由 周学彬 于 2013-10-18 21:26 编辑
Java语言中,多继承容易带来安全隐患:当多个父类中定义了相同功能,而且功能内容不同时,子类对象不确定要运行哪一个。不仅仅是方法有隐患,成员变量也有隐患。子类如果多继承,父类中有相同的成员变量,子类使用变量时也不确定是继承自那个父类。
但是java保留了这种多继承机制,并用另一种体现形式来完成表示,就是实现接口,java可以实现多个接口。因为接口中只有静态常量,定义的全是抽象方法。多实现时,如果要使用某个方法,子类必须自己实现,所以不会存在安全隐患。
java不支持多继承,虽然损失了程序的灵活性,但是程序的运行效率会因此提高。
C++的多继承中,有一个作用域运算符::,多继承时,如果出现了父类有相同的函数,使用作用域运算符指明是继承那个父类的方法就可以了。比如Parent::function();
作者:
卜弦
时间:
2013-10-18 21:22
class A
{
void show()
{
System.out.println("a");
}
}
class B
{
void show()
{
System.out.println("b");
}
}
class C extends A,B
{}
C c = new C();
c.show();
/*
Java语言中:java只支持单继承,不支持多继承。
因为多继承容易带来安全隐患:当多个父类中定义了相同功能,但是功能内容不同时,子类对象不确定要运行哪一个。
但是java保留这种机制。并用另一种体现形式来完成表示。多实现。
所谓的多实现相当于是扩展子类的功能。这就要用到接口的知识。请看下面的程序。
这样即使实现的多个接口中出现相同的方法也没有关系,因为抽象方法并没有方法体。子类对接口中的方法进行复写。
想要什么功能就怎么复写。
*/
interface InterA
{
public static final int NUM = 3;
public abstract void show();
}
interface InterB
{
public abstract void show();
}
class Demo
{
public void function(){}
}
class Test extends Demo implements InterA,InterB
{
public void show()
{
System.out.println("haha");
}
}
//单继承说不上优势,也说不上劣势,但是的确保证了程序的安全性。另外,多实现就一定是一个优势!
//子类可以扩展很多功能。
复制代码
作者:
☆╰學不会☆╮
时间:
2013-10-18 21:39
java中的类只能是单继承的,接口可以多实现。
作者:
風諾
时间:
2013-10-18 22:47
对于你这个问题,我自己觉得
实现多继承和单继承的决定权都在程序语言的设计者和维护者手里
或者说,他们定义了编译的方法,定义了java虚拟机的执行方式
可能他们认为单继承相对于多继承更好,所以采用了单继承
并不是因为真的无法实现多继承,我想,他们也可以定义一个复杂的规则应对多继承
只是,那样可能让java变得不易学、易理解了
视频不也讲到了么,java从C还是什么演变而来,去掉了其中一些东西
大概就是为了让java更简洁
我猜测,接口的出现与现实生活的事物很相似,易于理解,使得语言更加好学习
毕老师讲课的视频不就说明了java其实和现实生活很相似吗?
毕老师那么多生动形象的例子,让java变得不那么抽象,更加容易理解
作者:
aion2013tian
时间:
2013-10-19 08:00
相比于C++的多继承,java只支持类的单继承,java中的所有类的共同基类是Object类,Object类java类树的唯一根节点,这种单继承有以下好处:
(1).单继承可以确保所有的对象拥有某种共同的特性,这样对于JVM虚拟机对所有的类进行系统级的操作将提供方便,所有的java对象可以方便地在内存堆栈中创建,传递参数也变的更加方便简单。
(2).java的单继承使得实现垃圾回收器功能更加容易,因为可以确保JVM知道所有对象的类型信息。
作者:
雪人
时间:
2013-10-19 08:53
单继承,多重实现接口
作者:
周志龙
时间:
2013-10-19 18:21
如果楼主已经解惑,请将帖子改为提问结束
作者:
To
时间:
2013-10-20 19:07
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:
http://bbs.itheima.com/thread-89313-1-1.html
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2