java为什么可以继承多个接口,java中为什么类只能单继承而接口可以多继承
这篇文章给大家聊聊关于java为什么可以继承多个接口,以及java中为什么类只能单继承而接口可以多继承对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
java中为什么类只能单继承而接口可以多继承
如果存在多继承,那个两个父类有两个一模一样的方法怎么办,子类应该继承哪一个方法。你也许会问如果多个接口中有相同的方法怎么办:接口中的方法都是方法名,没有函数体,具体的实现需要靠实现类去实现,一旦实现类实现了方法,那么就不存在多个接口有相同的方法名的出现的问题了,因为函数体都是一样的。
为什么Java可以多继承interface,而不可以多继承class
多继承指一个子类能同时继承于多个父类,从而同时拥有多个父类的特征,但缺点是显著的。
1.若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量。如:
publicclassclassA//父类classA
{
privateintnum=0;
}
publicclassclassB//父类classB
{
privateintnum=1;
}
publicclassclassCextendsclassA,classB//子类classC继承于classA和classB
{
publicstaticvoidmain(String[]args)
{
classCobj=newclassC();
obj.print();//调用父类成员变量num,那num等于0还是1?
}
publicvoidprint()
{
System.out.println(super.num);
}
}
2.若一个子类继承的多个父类拥有相同方法,同时子类并未覆盖该方法(若覆盖,则直接使用子类中该方法),那么调用该方法时将无法确定调用哪个父类的方法。如:
publicclassclassA//父类classA
{
publicvoidfun()
{
System.out.print("hello");
}
}
publicclassclassB//父类classB
{
publicvoidfun()
{
System.out.print("hello");
}
}
publicclassclassCextendsclassA,classB
{
publicstaticvoidmain(String[]args)
{
classCt=newclassC();
t.print();
}
publicvoidprint()
{
super.fun();//调用父类中fun方法,但由于classA、classB都有fun()方法,将无法确定使用
//哪个父类中的方法
}
}
因此,Java仅允许单继承,即一个子类只能继承于一个父类。但为了拓展子类的功能,Java使用接口以克服不使用多继承带来的不足。
接口是一个特殊的抽象类,接口中成员变量均默认为 static final类型,即常量,且接口中的方法都为抽象的,都没有方法体。
具体方法只能由实现接口的类实现,在调用的时候始终只会调用实现类的方法(不存在歧义),因此不存在多继承的第二个缺点;而又因为接口只有静态的常量,但是由于静态变量是在编译期决定调用关系的,即使存在一定的冲突也会在编译时提示出错;而引用静态变量一般直接使用类名或接口名,从而避免产生歧义,因此也不存在多继承的第一个缺点。对于一个接口继承多个父接口的情况也一样不存在这些缺点。
java中接口可以继承多个接口吗
接口是常量值和方法定义的集合。接口是一种特殊的抽象类。
java类是单继承的。classB Extends classA
java接口可以多继承。Interface3 Extends Interface0, Interface1, interface……
不允许类多重继承的主要原因是,如果A同时继承B和C,而b和c同时有一个D方法,A如何决定该继承那一个呢?
但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。
自我看法
因为类如果可以多继承,实例化时,如果要跳用父类的方法,如果两个一样,
根本就不知道该调用那个父类的方法;
但是接口就不一样了,因为接口继承多个接口,就算多个接口有相同的方法,
但是最终实现接口的类只能实现一个方法且@Override一个方法,所以调用时就
不会有问题了
注意:
1)一个类如果实现了一个借口,则要实现该接口的所有方法。
2)方法的名字、返回类型、参数必须与接口中完全一致。如果方法的返回类型不是void,则方法体必须至少有一条return语句。
3)因为接口的方法默认是public类型的,所以在实现的时候一定要用public来修饰(否则默认为protected类型,缩小了方法的使用范围)。
请问为什么在java中不能多继承,而接口却可以多继承
类
定义
属性和方法
描述某一类事物的抽象
而
接口
定义的是行为
并不限于任何具体意向
按照
逻辑
上来说
单继承更明确
一个子类就应该是其父类
代表
的事物中的某个更具体的类别
不应该即是这种东西又是那种东西
而从实用角度上来说
单继承易读
易维护
语义清晰
逻辑清楚
而接口则不同
接口只定义一些公共行为
比如有两个接口
一个定义了跑这个动作
另一个定义了走这个动作
人这个类就可以同时实现这两个接口所定义的行为
类对接口的implements称作实现
不能叫做继承
当然
接口可以多继承接口
因为接口只定义行为
并不包含类别的含义
不指代具体的某类事物
而且
从语义上来说
接口对接口的继承称之为扩展更为合适
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!