1.若子类继续的父类中具有雷同的成员变量,子类在援用该变量时将没法鉴别运用哪一个父类的成员变量。
如:
public class classA // 父类 classA { private int num = 0; } public class classB // 父类 classB { private int num = 1; } public class classC extends classA,classB // 子类 classC 继续于 classA 和 classB { public static void main(String [] args) { classC obj = new classC(); obj.print(); // 挪用父类成员变量 num , 那 num 即是 0 照样 1 ? } public void print() { System.out.println(super.num); } }
2.若一个子类继续的多个父类具有雷同要领,同时子类并未掩盖该要领(若掩盖,则直接运用子类中该要领),那末挪用该要领时将没法肯定挪用哪一个父类的要领。
如:
public class classA // 父类 classA { public void fun() { System.out.print("hello"); } } public class classB // 父类 classB { public void fun() { System.out.print("hello"); } } public class classC extends classA,classB { public static void main(String [] args) { classC t = new classC(); t.print(); } public void print() { super.fun(); // 挪用父类中 fun 要领,但因为classA、classB都有fun()要领,将没法肯定运用 // 哪一个父类中的要领 } }
因而,Java仅许可单继续,即一个子类只能继续于一个父类。但为了拓展子类的功用,Java运用接口以战胜不运用多继续带来的不足。
接口是一个特别的笼统类,接口中成员变量均默以为 static final 范例,即常量,且接口中的要领都为笼统的,都没有要领体。
具体要领只能由完成接口的类完成,在挪用的时刻一直只会挪用完成类的要领(不存在歧义),因而不存在 多继续的第二个瑕玷;而又因为接口只要静态的常量,然则因为静态变量是在编译期决议挪用关联的,纵然存在肯定的争执也会在编译时提醒失足;而援用静态变量平常直接运用类名或接口名,从而防止发生歧义,因而也不存在多继续的第一个瑕玷。 关于一个接口继续多个父接口的状况也一样不存在这些瑕玷。
以上就是java为何不能多继续的细致内容,更多请关注ki4网别的相干文章!