JAVA-接口

接口

  • 和抽象类不同,定义接口使用interface修饰符

  • 接口的访问权限与public和包访问权限,与类类似

  • 接口可以多继承,它继承父接口中定义的常量和方法

  • 接口的成员变量声明

    • [public] [static] [final] 数据类型 成员变量名 = 常量;

    • 接口中的成员变量默认是[public] [static] [final]

  • 接口中的成员方法声明

    • [public] [abstract] 返回值类型 方法名称(参数列表);

    • 接口中的成员方法默认是[public] [abstract]

定义一个接口
public interface 接口名{
    // 接口成员
}
实现接口
实现接口需要注意
  • 一个类可以实现多个接口,各接口之间用逗号分隔

  • 实现接口的类必须实现接口中定义的所有抽象方法,即使不使用也必须实现它,通常用空方法实现子类不需要的方法,如果抽象方法有返回值,可返回默认值

  • 接口的实现类中允许包含普通方法

  • 在实现抽象方法时需要指定public,否则编译错误

public 类名 implements 接口名...
{
    //接口内方法的实现
    
    
}

实现一个接口和它的实现类

public interface USB {
    void fun();
}
class TypeC implements USB{
    /**
     * USB接口的实现
     */
    @Override
    public void fun() {
        System.out.println("实现了TypeC接口");
    }
​
    public static void main(String[] args) {
        TypeC typec = new TypeC();
        typec.fun();
    }
}

多继承接口的语法

[修饰符] interface 接口名 extends  父接口1,父接口2...{
    定义方法
}

JDK8.0之后接口新特性

default关键字

default关键字,在接口中修饰方法(称为默认方法),default修饰的方法可以包含方法体
// 实现
public interface charge {
    default void show()
    {
        System.out.println("正在充电");
    }
    void add();
}
class demo implements charge{
​
    /**
     * 实现接口中的add方法
     */
    @Override
    public void add() {
        System.out.println("增加电量");
    }
​
    public static void main(String[] args) {
        demo dem = new demo();
        dem.show();
        dem.add();
    }
​
}

!注意

接口的默认实现方法是可以被子类覆盖的,也可以不被子类覆盖。子类不覆盖时可以直接调用默认方法。

如果一个类实现两个接口,这两个接口又同时包含一个名字相同的default方法,在这种情况下,编译器会报错,实现类必须是重写接口的抽象方法。

static关键字

static方法通过接口名.方法名直接调用

public interface charge {
    default void show()
    {
        System.out.println("正在充电");
    }
    void add();
    static void full()
    {
        System.out.println("电量已充满");
    }
}
class demo implements charge{
​
    /**
     * 实现接口中的add方法
     */
    @Override
    public void add() {
        System.out.println("增加电量");
    }
​
    public static void main(String[] args) {
        demo dem = new demo();
        dem.show();
        dem.add();
        charge.full();
    }
​
}
​

JDK9.0之后增加特性

方法的访问修饰符可以声明为private

方法修饰为private

public interface Eat {
    private void beef()
    {
        System.out.print("吃牛肉");
    };
    default void noodles()
    {
        beef();
        System.out.println("面");
    }
    String eat(String name);
}
class person implements Eat{
​
    /**
     * @param name
     * @return
     */
    @Override
    public String eat(String name) {
        return "人吃" + name;
    }
​
    public static void main(String[] args) {
        person p = new person();
        p.noodles();
        System.out.println(p.eat("方便面"));
    }
}

接口和抽象类的区别

特性抽象类接口
多继承子类只能继承一个直接抽象类(单继承)接口可以继承多个父类接口
实现子类通过extends继承抽象类子类通过implements实现多个接口
成员修饰符抽象类可以定义变量,也可以定义常量接口中只能定义常量(public static final 修饰的变量)default接口的默认方法 static修饰的可以通过接口名.静态方法名
子类实现子类在实现抽象方法时不允许缩小访问权限子类在实现抽象方法时必须指定public权限
构造函数抽象类可以有构造函数,但不能进行实例化接口中不能定义构造函数
最高层类的最高层是Object接口没有最高层

想同点

  • 两者都不能实例化

  • 都是引用类型

  • 都包含抽象方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值