接口和内部类(一)

一、接口

1.生活中的接口?

网口,usb,typec

2.接口定义

接口 --- 特殊的抽象类 -- 特殊的父类

[修饰符] interface 接口名{
    常量
    抽象方法
}

1)修饰符 public

2)接口使用interface关键字定义

3)接口名,起名字,要符合标识符命名规范

4)接口中定义的属性都是常量,默认使用public static final 修饰

        public static final 可不写

5)接口中定义的属性都是抽象方法,默认使用public abstract修饰

        public abstract可不写

6)接口没有构造方法  接口不能创建对象

7)接口可以继承接口,并且支持多继承

3.使用接口

//实现多个接口
public 类名 implements 接口1, 接口2... {
 //属性
 //构造方法
 //方法
}

1)修饰符 public

2)实现类类名,起名字,要符合标识符命名规范

3)一个实现类 多个接口

4)如果一个类实现了接口,那么就要重写该接口的所有抽象方法

如果没有重写所有的抽象方法,那么这个实现类就要被定义为抽象类

4.接口的多态

1)继承的多态

子类对象赋值给父类引用/父类引用指向子类对象

Person p = new Student();

2)接口的多态

实现类对象赋值给接口引用/接口引用指向实现类对象

Vehicle v = new Car();
Vehicle v1 = new Fighter();
Energy e = new Car();

编译时 -- 看左边 --在编译时左边有方法才能调用(相当于编译器上)

运行时 --看右边 --运行期间的实际运行是右边对象拥有的方法

3)接口的多态应用

a.接口类型作为方法参数

b.接口类型作为方法的返回值

4)向下转型

(类型)引用

需要先判断引用本身的类型--instanceof

public interface Vehicle {
    void start();
    void run();
    void stop();
    default void jiasu(){
        System.out.println("加速");
    }
    default void jiansu(){
        System.out.println("减速");
    }
}

public class Plane implements Energy,Vehicle {
    @Override
    public void addOil() {
        System.out.println("飞机加油");
    }

    @Override
    public void start() {
        System.out.println("飞机启动");
    }

    @Override
    public void run() {
        System.out.println("飞机飞行");
    }

    @Override
    public void stop() {
        System.out.println("飞机停止");
    }
    public void fighter(){
        System.out.println("fffff");
    }
}

public class Car implements Vehicle,Energy{
    @Override
    public void addOil() {
        System.out.println("汽车加油");
    }

    @Override
    public void start() {
        System.out.println("汽车启动");
    }

    @Override
    public void run() {
        System.out.println("汽车奔跑");
    }

    @Override
    public void stop() {
        System.out.println("汽车停止");
    }
}
public interface Energy {
    void addOil();
}
public class MyTest {
    public static void main(String[] args) {
        Vehicle v1 = new Car();
        Vehicle v2 = new Plane();
        test(v1);
        test(v2);


    }
    public static void test(Vehicle v){
        if(v instanceof Car){
            Car c = (Car)v;
            c.addOil();
        }
        else if(v instanceof Plane){
            Plane p = (Plane) v;
            p.fighter();

        }
    }
    public static Vehicle create(String name){
        switch(name){
            case "Car":
                return new Car();
            case "Fighter":
                return new Fighter();
            case "Plane":
                return new Plane();
            default:
                System.out.println("aaaa");
        }
        return null;
    }

}

你可能感兴趣的:(Java,java,开发语言)