「java中单继承的局限性」java中单继承还是多继承
本篇文章给大家谈谈java中单继承的局限性,以及java中单继承还是多继承对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、关于java单继承问题
- 2、多继承有什么坏处,为什么java搞单继承,接口为什么可以摈弃这些坏处
- 3、JAVA的单继承中允许一个父类有多个子类吗?
- 4、java 中的继承的 优点和缺点 主要是缺点
- 5、单继承和多继承相比,各有什么优点?缺点?
- 6、JAVA 中的 -> 是什么意思?
关于java单继承问题
Java不支持多继承,但是通过一些巧妙的设计来达到和多继承同样的效果
通过接口、内隐类,继承、实现,互相配合,达到多继承的效果
1、Java中一个类不能继承多个具体class。
2、一个类只可继承自一个具体 class,但可实现多个接口。
interface不涉及到实现细节,不与任何存储空间有关连。
可以实现合并多个 interface ,达到可向上转型为多种基类的目的。
新类可继承自一个具象class,其余继承都得是interfaces。
3、outer class不可继承自多个具体 class,可在其内部设多个inner class,每个inner class都能各自继承某一实现类。
inner class不受限于outer class 是否已经继承自某一实现类。
4、inner class可以说是多重继承问题的完整解决方案。
inner class 可 “继承自多个具象或抽象类”。
一个类不能继承自多个一般类。
多继承有什么坏处,为什么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支持多重继承。A继承BB继承CC继承D。
多重继承的出现,就有了继承体系。体系中的顶层父类是通过不断向上抽取而来的。它里面定义的该体系最基本最共性内容的功能。
所以,一个体系要想被使用,直接查阅该系统中的父类的功能即可知道该体系的基本用法。那么想要使用一个体系时,需要建立对象。建议建立最子类对象,因为最子类不仅可以使用父类中的功能。还可以使用子类特有的一些功能。
简单说:对于一个继承体系的使用,查阅顶层父类中的内容,创建最底层子类的对象。
子父类出现后,类中的成员都有了哪些特点:
1:成员变量。
当子父类中出现一样的属性时,子类类型的对象,调用该属性,值是子类的属性值。
如果想要调用父类中的属性值,需要使用一个关键字:super
This:代表是本类类型的对象引用。
Super:代表是子类所属的父类中的内存空间引用。
注意:子父类中通常是不会出现同名成员变量的,因为父类中只要定义了,子类就不用在定义了,直接继承过来用就可以了。
java 中的继承的 优点和缺点 主要是缺点
java
中的继承的
优点和缺点如下:
优点:1.可以使用父类的所有非私有方法;而且单继承可由接口来弥补。
2.可以继承父类中定义的成员方法以及成员变量,使得子类可以减少代码的书写。还可以重写父类的方法以增加子类的功能。
缺点:1.耦合性太大
2.就是破坏了类的封装性,其实继承一般多用于抽象方法的继承和接口的实现
单继承和多继承相比,各有什么优点?缺点?
单继承的优点:避免了一些错误 给你举个例子
class Father1{
public void method(){
//方法的实现1
}
}
class Father2{
public void method(){
//方法的实现2
}
}
现在你用一个子类去同时继承这两个父类
class Son extends Father1,Father2{
//……
}
你想想看 若你想调用method方法 那么到底编译器调用哪个父类的method方法呢 这样就会带来错误 不利于程序的安全性
而java仅仅支持但继承 就不存在这种问题
有的人也许会说 那么我非要用java继承多个类怎么办 别担心 在java中有接口这个实现方式 比c++这种语言支持的多继承相比更加优雅安全
2.缺点:java单继承 所以这个继承就显得十足珍贵 所以你在不是非要用继承的地方用了继承 那么你以后要维护这段代码非要继承不可的话 你就蛋疼了
所以个人认为 能用组合的地方尽量用组合 不要总想着继承
JAVA 中的 -> 是什么意思?
“-”是Java 8新增的Lambda表达式中,变量和临时代码块的分隔符,即:
(变量)-{代码块}
如果代码块只有一个表达式,大括号可以省略。如果变量类型可以自动推断出来,可以不写变量类型。
java中单继承的局限性的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java中单继承还是多继承、java中单继承的局限性的信息别忘了在本站进行查找喔。