大家好,今天小编关注到一个比较有意思的话题,就是关于java语言支持多继承的问题,于是小编就整理了4个相关介绍Java语言支持多继承的解答,让我们一起看看吧。
JAVA可不可以继承多个类?
一个类不能直接继承多个类,j***a是单继承语言。比如说这样:class A extends B,C 不能这样写,因为j***a不支持多继承。但是可以像下面这样实现继承多个类:class A extends B,class C extends A,这样C就同时继承了B和A两个类了。
J***a为什么不能继承多个父类?
这个问题,j***a之父曾经回答过,设计j***a语言的初衷就是要设计一门更加简单的语言,所以j***a的设计屏蔽了一些负载的东西,其中就包括指针和多继承。为什么说多继承复杂呢?这就要说一个多继承的菱形继承问题(又叫钻石继承)。
菱形继承(钻石继承)
那么菱形继承有什么问题?
***浪费:移动电话继承了多份父类(硬件)的属性(getCreateTime()的引用);
二义性:移动电话的getId无法确定是返回imei还是mac地址。
那么c++中如何解决这个问题?有两种解决办法:
移动电话 d = 移动电话()
J***a中支持单继承,多实现。
如果支持多继承,那么指一个子类能同时继承于多个父类,从而同时拥有多个父类的特征,若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量,因此多继承是存在争议的,是不能多继承的。
通俗点来将,一个人不可能是拥有多个父亲或母亲的。
如果J***A中一个类继承的两个接口中有相同方法,怎么办?
一,一般来说,J***A不支持一个类继承的两个接口中存在相同的方法,这样容易引起接口继承混乱; 二,如果当事人一定要让一个类继承的两个接口存在相同的方法,可以通过内部类来实现,一般来说J***A是不允许接口重名的; 三,内部类可以这样写: interface I1 { void get(); } interface I2 { void get(); } public class MultiInter implements I1{ public void get(){ System.out.println("I am from I1"); } private class I2Impl implements I2{ public void get(){ System.out.println("I am from I2"); } } public void get2(){ I2 i2=new I2Impl(); i2.get(); } public static void main(String rsg[]){ MultiInter mi=new MultiInter(); mi.get(); mi.get2(); } }
j***a构造函数能否被继承?
不能,因为子类继承父类的时候,先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”。继承(extends)的含义其实是“扩展”,子类完全没必要扩展父类的构造函数,因为反正每次调子类的时候都会“自动运行”它父类的构造函数,如果真的需要子类构造函数特殊的形式,子类直接修改或重载自己的构造函数就好了。估计是你对“构造函数”的意义本身不理解,“调用”一个类有“继承”和“组合(说白了new 一个类)”两种方式,当你“调用”一个类的时候就会“自动运行”它的“构造函数”。
到此,以上就是小编对于j***a语言支持多继承的问题就介绍到这了,希望介绍关于j***a语言支持多继承的4点解答对大家有用。