最佳回答2023-01-02
java 在编译的时候就会检查 类是不是多继承,如果出现多继承编译不通过。但是在java语法中接口是可以多继承的。
拓展阅读:
java 如果出现多继承、父类中都有相同的属性和name 值 子类如果使用父类的属性和name 值 无法确定是哪一个父类的是 属性和name值。
父类中如果相同的方法,并且子类并没有覆盖该方法。子类调用父类的时候 无法判断是那个父类的方法。
接口是可以多继承的。接口(jdk 1.7 以下版本)里面的方法并有实现,即使接口之间具有相同的方法仍然是可以的 几个接口可以有想通的实现类和实现方法。而且接口 接口里面的成员变量都是 static final的 有自己静态域 只能自己使用。
接口的实现类可以有多个 。(java bean 注解注入) 一个接口(用多个实现类)被注入进来。调用方法的时候。会先依据bean 查找那个 一样的bean 。调用该实现类的方法。其次如过 实现类上都没有注解的 bean 会按照加载的先后顺序去调用的。
其他回答(2)
类的继承是is a的关系,就是是什么?
原因是我搬过来的,我也讲不清:原链接:https://zhidao.baidu.com/question/2116140192187998827.html
多继承指一个子类能同时继承于多个父类,从而同时拥有多个父类的特征,但缺点是显著的。
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 类型,即常量,且接口中的方法都为抽象的,都没有方法体。 具体方法只能由实现接口的类实现,在调用的时候始终只会调用实现类的方法(不存在歧义),因此不存在多继承的第二个缺点;而又因为接口只有静态的常量,但是由于静态变量是在编译期决定调用关系的,即使存在一定的冲突也会在编译时提示出错;而引用静态变量一般直接使用类名或接口名,从而避免产生歧义,因此也不存在多继承的第一个缺点。
对于一个接口继承多个父接口的情况也一样不存在这些缺点。
不能。\x0d\x0a一个类不能直接继承多个类,java是单继承语言。\x0d\x0a比如说这样:class A extends B,C 不能这样写,因为java不支持多继承。\x0d\x0a但是可以像下面这样实现继承多个类:class A extends B,class C extends A,这样C就同时继承了B和A两个类了。
最新问题