Java接口

接口

Java提供了一个关键字interface定义接口。

public interface oil {
    //成员变量(常量)
//    成员方法(抽象方法)
    String SCHOOL_NAME="itheim";
//    public abstract 可以省略
    public abstract void run();
    void stop();
}

jdk8之前,接口中只能定义常量和抽象方法

  • 接口不能创建对象

  • 接口是用来被类实现的,实现接口的类称为实现类,一个类可以同时实现多个接口

//test为实现类,同时实现多个接口
//实现类实现多个接口,必须重写接口中的所有抽象方法
public class test implements A ,B{
​
    @Override
    public void run() {
        
    }
​
    @Override
    public void play() {
​
    }
}

接口的好处

  • 弥补了类单继承的不足,一个类可以同时实现多个接口,使类的角色更多,功能更强大

  • 让程序可以面向接口编程,这样程序员可以灵活方便的切换各种业务实现,更有利于程序的解耦合

//test为实现类,同时实现多个接口
//实现类实现多个接口,必须重写接口中的所有抽象方法
public class test {
    public static void main(String[] args) {
        People p=new Student();
        Boy b=new Student();
        Driver d=new Student();
//        解耦合
        Driver d1=new Teacher();
        Driver d2=new Student();
    }
    
   
}
interface Driver{
​
}
interface Boy{}
​
class People{}
class Student extends People implements Driver,Boy{}
class Teacher implements Driver,Boy{}

接口新增的三个方法

jdk8开始,接口新增了三个方法

public class test {
    public static void main(String[] args) {
        AImpl a=new AImpl();
        a.run();
        A1.play();
    }
}
​
public interface A1{
//    1.默认方法(普通实例方法),必须加default修饰,默认public修饰 使用接口实现类的对象来调用
    default void run(){
        System.out.println("A.run()");
    }
//    2.私有方法 jdk9支持 使用接口中的其他实例方法来调用
    private void stop(){
        System.out.println("A.stop()");
    }
//    3.静态方法 默认public 修饰,只能使用当前接口名来调用
    static void play(){
        System.out.println("A.play()");
    }
    
}
class AImpl implements A1{
​
}

为什么要新增这些方法?

  • 增强接口能力,便于项目扩展和维护

接口的注意事项

​
public class test {
    public static void main(String[] args) {
​
    }
}
​
//1.接口与接口可以多继承,一个接口可以同时继承多个接口
//类与类,单继承,一个类只能继承一个直接父类
//类与接口,多实现,一个类可以同时实现多个接口
//接口与接口,多继承,一个接口可以同时继承多个接口
​
//2.一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承、多实现
class A1 implements B1,C{
    @Override
    public void run() {
​
    }
​
    @Override
    public void play() {
​
    }
}
interface B1{
    void run();
}
interface C{
    void play();
}
​
//3.一个类继承了父类,又实现了接口,如果父类和接口中有同名的方法,实现类会优先用父类的
class A2 extends B2 implements C2{
    public void go(){
        run();//父类
        super.run();//父类
        C2.super.run();//C2接口的方法
    }
}
class B2{
    public void run(){
        System.out.println("B2");
    }
}
interface C2{
    default void run(){
        System.out.println("C2");
    }
}
​
//4.一个类实现了多个接口,如果多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可
class A3 implements B3,C3{
    @Override
    public void run() {
        System.out.println("self");
        B3.super.run();
        C3.super.run();
    }
}
interface B3{
    default void run(){
        System.out.println("B3");
    }
}
interface C3{
    default void run(){
        System.out.println("C3");
    }
}
​
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值