Java可以有多层继承,即一个类可以继承某一个类的子类,如:类B继承了类A,类C又可以继承类B,那么类C也间接继承了类A
子类可以继承父类所有的成员变量和方法,但子类永远无法继承父类的构造方法。在子类的构造方法中可使用语句super(参数列表)调用父类的构造方法。
按照逻辑上来说,单继承更明确 一个子类就应该是其父类代表的事物中的某个更具体的类别,不应该即是这种东西又是那种东西
而从实用角度上来说,单继承易读、易维护、语义清晰、逻辑清楚
多继承造成的问题。钻石危机:
A foo() / \ / \ B foo() C foo() \ / \ / D foo()
假设类A中有一个public方法fun(),然后类B和类C同时继承了类A,类B或类C中各自对fun()进行了覆盖,这时类D通过多继承同时继承了类B和类C,这样便导致钻石危机了,程序在运行的时候对应方法fun()该如何判断?
class A{ public void foo(){ } } class B extends A{ public void foo(){ } } class C extends A{ public void foo(){ } } //Not allowed here. public class D extends B, C{ public void foo(){ } }
(1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量。
(2)如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法。
原文地址:https://www.jb51.cc/java/1192002.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。