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="你不好";
}

posted @   风筝上的猫  阅读(1514)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示