java接口

接口

一、接口的语法

语法:

public interface 接口名{

// 定义的属性都是公有静态常量

// 定义的方法都是公有抽象方法

}

// 不能直接创建对象
public interface MyInterface {
    // 定义的所有属性都是公有静态常量public static final
    String name = "name";
    
    // 定义的普通方法默认为公有抽象方法
    void m1();
}

二、与抽象类的异同

相同:

  • 可以作为引用类型

  • 不能创建对象

  • 具有Object类的方法

区别:

  • 接口中定义的属性,即使不加任何修饰符,也是公有静态常量。

  • 定义的普通方法默认为公有抽象方法。

  • 不能定义构造方法

  • 不能定义静态代码块、动态代码块

经典面试题:接口和抽象类的区别。

三、接口的概念

接口是一种能力和约定。一般适用于使用多态,但是又无法抽取is a关系来定义父类的情况,使用接口定义某种能力,来实现多态。

public class Demo1 {
    // 假设要进行庆典活动,准备一场飞行表演
    public static void main(String[] args) {
        Day day = new Day();
        Flyable plane = new Plane();
        day.show(plane);
        
        Flyable bird = new Bird();
        day.show(bird);
    }
}
// 具备飞行能力
public interface Flyable {
    void fly();
}
​
public class Plane implements Flyable{
    @Override
    public void fly() {
        System.out.println("飞机在进行飞行表演...");
    }
}
​
public class Bird implements Flyable{
    @Override
    public void fly() {
        System.out.println("鸽子在进行飞行表演...");
    }
}
​
// 节日表演
public class Day {
    public void show(Flyable f) {
        System.out.println("庆典开始");
        f.fly();
    }
}

四、利用接口来补充多继承的缺失

接口中的方法没有实现,可以使用类来实现多个接口。

public interface A {
    void m1();
}
​
public interface B {
    void m1();
}
​
public class D {
​
}
​
public class C extends D implements A, B{
    @Override
    public void m1() {
        System.out.println("c===m1");
    }
}

五、接口的继承

接口可以继承其他接口,且可以继承多个接口。

public interface A {
    String name = "A";
    void m1();
    void m3();
}
​
public interface B {
    String name = "B";
    void m2();
    void m3();
}
​
public interface C extends A, B{
    void m4();
}
​
public class D implements C{
    @Override
    public void m1() {
    }
​
    @Override
    public void m3() {
    }
​
    @Override
    public void m2() {
    }
​
    @Override
    public void m4() {
    }
}
​
public class Demo1 {
    public static void main(String[] args) {
//      System.out.println(C.name); // 会报错,二义性
        System.out.println(A.name);
        System.out.println(B.name);
    }
}

接口多态的案例:

public abstract class Animal {
    public abstract void eat(); // 吃
    public abstract void sleep(); // 睡
}
​
public interface Runnable {
    void run(); // 跑
}
​
public interface Swimmable {
    void swim(); // 游
}
​
public class Dog extends Animal implements Swimmable, Runnable {
    @Override
    public void run() {
    }
​
    @Override
    public void swim() {
    }
​
    @Override
    public void eat() {
    }
​
    @Override
    public void sleep() {
    }
}
​
public class Demo1 {
    public static void main(String[] args) {
        Dog dog = new Dog(); // 可以调用全部的4个方法
        Animal a = dog; // 只能调用动物类中定义的eat和sleep两个方法
        Runnable r = dog; // 只能调用run方法
        Swimmable s = dog; // 只能调用swim方法
    }
}

六、常量接口

在项目中往往会有很多常量需要使用,而在接口中定义的变量默认为常量,所以接口用来定义常量非常适合。在项目用来定义常量的接口称为常量接口,里面可能没有任何方法。

public interface Constants {
    int PAGE_SIZE = 10; // 每页显示的条数
    String FILE_BASE_PATH = "D:/images/"; // 文件上传时存放的路径
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值