认识Java的第十一天(中)——接口的多实现

接口的多实现

在继承体系中,一个类只能继承一个父类,而对于接口来,那么一个类可以实现多个接口,这个就是我们的接口的多实现。
class 类名 [extends 父类] implements 接口1,接口2,接口3{
//重写接口中的抽象方法【必须要重写】
//重写接口中的默认方法【选择性去重写】
}

抽象方法

接口中,有多个抽象方法,实现类必须重写所有的抽象方法,如果抽象方法有重名的现象,只能实现一次就可以
定义多个接口

public interface A {
    //定义一些抽象的方法
    public abstract void showA();
    public abstract void show();
}
public interface B {
    //抽象方法
    public abstract void showB();
    public abstract void show();
}
public class C implements A,B{
    @Override
    public void showA() {
        System.out.println("我是showA");
    }

    @Override
    public void showB() {
        System.out.println("我是showB");
    }

    @Override
    public void show() {
        System.out.println("我是show方法");
    }
}
public class Demo {
    public static void main(String[] args) {
        C c=new C();
        c.show();
        c.showA();
        c.showB();
    }
}
/*我是show方法
我是showA
我是showB*/

默认方法

接口中,有多个默认方法时,实现类都可以继承使用,如果默认方法有重名的,必须重写一次。

public interface A {
    public default void show(){
        System.out.println("我们接口a中的show");
    }
    public default void show1(){
        System.out.println("我是接口a中的show1");
    }
}
public interface B {
    public default void show(){
        System.out.println("我们接口b中的show");
    }
    public default void show2(){
        System.out.println("我是接口b中的show1");
    }
}
public class C implements A,B{
    @Override
    public void show() {
        System.out.println("我是showA");
    }
}
public class Demo {
    public static void main(String[] args) {
        C c=new C();
        c.show();
        c.show1();
        c.show2();
    }
}
/*结果:我是showA
我是接口a中的show1
我是接口b中的show1*/

静态方法

接口中,存在同名的静态方法并不会冲突,原因是只能通过各自接口去访问静态方法。

public interface A {
    public static void mathod(){
        System.out.println("我是接口a中的静态方法");
    }
}
public interface B {
    public default void show() {
    public static void mathod() {
        System.out.println("我是接口b中的静态方法");
    }
}
public class Demo {
    public static void main(String[] args) {
        A.mathod();
        B.mathod();
    }
}
//结果:我是接口a中的静态方法
//我是接口b中的静态方法

接口的多继承

一个接口可以继承另外一个或者多个接口,这和类之间的继承相似,接口的继承也使用我们的extends关键字,子接口继承父接口的方法,如果父接口中的默认方法有重名,那么子接口需要重写一次。

public interface A {
//默认方法
    public default void  methodA(){
        System.out.println("我是a接口中的方法");
    }
}
public interface E {
    public default void methodA(){
        System.out.println("EEEEE");
    }
}
public interface D extends A,E{
    @Override
    default void methodA() {
        System.out.println("DDDDDD");
    }
}

其他成员特点

1、接口中的,无法定义成员变量,但是可以定义常量,其值不能改变,默认使用public static final修饰
2、接口中,没有构造方法,不能创建对象
3、接口中的,没有静态代码块。

优先级的问题

当一个类中,既继承了一个父类,又实现了多个接口,父类中的方法和接口的默认方法重名,子类就会就近选择执行父类的成员方法。

public interface A {
//默认方法
    public default void  methodA(){
        System.out.println("我是a接口中的方法");
    }
}
public class C {
    public  void  methodA(){
        System.out.println("我是c接口中的方法");
    }
}
public class B extends C implements A{

}
public class Demo {
    public static void main(String[] args) {
        B b=new B();
        b.methodA();
    }
}
/*结果:我是c接口中的方法
*/
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值