「java继承太多有影响吗」java能多继承吗

博主:adminadmin 2023-01-07 08:03:10 1203

本篇文章给大家谈谈java继承太多有影响吗,以及java能多继承吗对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

为什么Java中继承是有害的

不是说继承是有害的,而是滥用继承是有害的!

(往往初学者喜欢滥用继承)

java里不允许多继承,为什么

类的继承是is a的关系,就是是什么?

原因是我搬过来的,我也讲不清:原链接:

多继承指一个子类能同时继承于多个父类,从而同时拥有多个父类的特征,但缺点是显著的。

1.若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量。如: public class classA // 父类 classA{privateint 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支持多继承吗?

可以多继承接口,但是不能多继承普通类。\x0d\x0a类定义属性和方法 描述某一类事物的抽象 \x0d\x0a而接口定义的是行为 并不限于任何具体意向。 \x0d\x0a\x0d\x0a按照逻辑上来说 单继承更明确 一个子类就应该是其父类代表的事物中的某个更具体的类别 不应该即是这种东西又是那种东西 。\x0d\x0a而从实用角度上来说 单继承易读 易维护 语义清晰 逻辑清楚。 \x0d\x0a\x0d\x0a而接口则不同 接口只定义一些公共行为 比如有两个接口 一个定义了跑这个动作 另一个定义了走这个动作 人这个类就可以同时实现这两个接口所定义的行为 。\x0d\x0a\x0d\x0a类对接口的implements称作实现 不能叫做继承 。\x0d\x0a\x0d\x0a当然 接口可以多继承接口 因为接口只定义行为 并不包含类别的含义 不指代具体的某类事物 而且 从语义上来说 接口对接口的继承称之为扩展更为合适。

java中为什么只有单继承,而不用多继承?(最能用讲的通俗一点)

顶楼上。

从技术的角度来说,是为了降低复杂性。例如,A类中有一个m方法,B类中也有一个m方法。如果C类单独继承A类或者B类时,C类中的m方法要么继承于A类,要么继承于B类。

而如果多重继承的话,C类的m方法有可能来自A类,又有可能来自B类,就会造成冲突。这样的继承关系,就会增加复杂性,甚至进一步影响多态的灵活性。

多继承有什么坏处,为什么java搞单继承,接口为什么可以摈弃这些坏处

多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面:

(1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量。例如:

类ClassA:

public class ClassA {

protected int varSame = 0;

}

类ClassB:

public class ClassB {

protected int varSame = 1;

}

子类ClassC:(假设允许类与类之间多继承)

public class ClassC extends ClassA, ClassB {

public void printOut() {

System.out.println(super.varSame);

}

public static void main(String[] args) {

ClassC classC = new ClassC();

classC.printOut();

}

}

上面程序的运行结果会是什么呢?输出0还是1?

(2)如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法。例如:

类ClassA:

public class ClassA {

public void printOut() {

System.out.println(0);

}

}

类ClassB:

public class ClassB {

public void printOut() {

System.out.println(1);

}

}

子类ClassC:(假设允许类与类之间多继承)

public class ClassC extends ClassA, ClassB {

public static void main(String[] args) {

ClassA classA = new ClassC();

classA.printOut(); // ------------------------- A行

ClassB classB = new ClassC();

classB.printOut(); // ------------------------- B行

ClassC classC = new ClassC();

classC.printOut(); //------------------------- C行

}

}

上面程序的运行结果会是什么呢?A、B、C三行的输出是0还是1?

正因为有以上的致命缺点,所以java中禁止一个类继承多个父类;

在接口中不能有实例变量,只能有静态的常量,不能有具体的方法(包含方法体),只能有抽象方法,因此也就摒弃了多继承的缺点。

对于一个类实现多个接口的情况,因为接口只有抽象方法,具体方法只能由实现接口的类实现,在调用的时候始终只会调用实现类的方法(不存在歧义),因此不存在 多继承的第二个缺点;而又因为接口只有静态的常量,但是由于静态变量是在编译期决定调用关系的,即使存在一定的冲突也会在编译时提示出错;而引用静态变量一般直接使用类名或接口名,从而避免产生歧义,因此也不存在多继承的第一个缺点。

对于一个接口继承多个父接口的情况也一样不存在这些缺点。

为什么Java中不允许多重继承

一,Java不支持多继承是由Java的定义决定的,Java最重要的定义,就是因为它是一种简单的面向对象解释型的语言。

二,Java不能多重继承是因为这种方法很少被使用,即使要使用也可以通过接口来实现多重继承问题。

三,Java的定义:

1,因为Java: 一种简单的,面向对象的,分布式的,解释型的(译者注:Java既不是纯解释型也不是纯编译型的语言),健壮的,安全的,架构中立的,可移植的,高性能的,支持多线程的,动态语言。

2,假设可以多重继承:

有两个类B和C继承自A;假设B和C都继承了A的方法并且进行了覆盖,编写了自己的实现;假设D通过多重继承继承了B和C,那么D应该继承B和C的重载方法,那么它应该继承的是B的还是C的?这就陷入了矛盾,所以Java不允许多重继承。

关于java继承太多有影响吗和java能多继承吗的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。