java--类单继承多实现,接口多继承
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
java继承分为:
单继承:一个子类最多只能有一个父类。
多继承:一个子类有两个以上的父类。一个接口可以继承多个类,一个类可以实现多个接口。
为什么说类是单继承的?
1、java的类只支持单继承,因为多继承会带来二义性。例如类D同时继承了B和C,类B和C中都有方法method( ),而且方法method是有方法体的,可以重写内容,那么A就不能确定到底该继承哪个类的d方法。
2、类是单继承、多实现的,也就是说一个子类只能有一个父亲,但一个父类可以有多个孩子。
写个例子
class A{
public void method()
{}
}
class B extends A{
@Override
public void method(){
System.out.println("bbb");
}
}
class C extends A{
@Override
public void method(){
System.out.println("ccc");
}
}
class E{
public void method(){}
}
class D extends B,C{
//类编译错误,这里在编写时就会报错
}
class F extends A,E{
//类编译错误,这里在编写时就会报错
}
接口为什么可以多继承
1、接口内都为抽象方法,没有方法体,所有子接口的继承并不影响该方法。具体的方法必须由实现接口的类去重写该方法,调用时会调用实现类的方法,不会出现歧义问题。
2、接口成员的特点:都是公共静态常量。成员变量只能是常量,默认public static final修饰;成员方法只能是抽象方法,默认public abstract修饰。
3、如果子接口继承的多个父接口中有相同的属性a,那么类在实现接口时是不能调用接口里面的属性a的,与类不能多继承原因一致,造成引用不明确。如果是不同的属性,实现类是可以调用的。
写个基础例子
interface A{
void method();
}
interface B extends A{
}
interface C extends A{
}
interface D extends B,C{
void method();
}
写个关于静态常量的例子
public interface A {
void method();
}
interface B extends A {
String a="你好";
public abstract void method();//public abstract可省略
}
interface C extends A {
String a="你不好";
}
public interface D extends B, C {
void method();
}
当我们去主函数中调D.a时会报引用不明确的错误
如果把C接口中的a换成b,再次调用则不会报错
interface C extends A {
String b="你不好";
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)