接口interface


java中的继承关系是单继承,如果拥有多个父类的时候,可以考虑使用接口实现 java中接口具备广泛的使用 用法: 使用interface 修饰 接口中可以包含多个方法,且方法跟抽象类中的抽象方法一致,可以不写实现,子类在实现接口的时候必须要实现代码逻辑 子类实现接口时使用implements 关键字 特征: 1 接口中的所有方法都是抽象方法,不能将其实现 2 接口中的所有方法的修饰符都是public,不写也都是public的权限,不是default 3 接口不能被实例化 4 接口的子类必须要实现接口中的所有方法,跟抽象类有所不同,抽象类中只有抽象方法需要被子类实现 5 子类可以实现多个接口 6 接口中的变量都是静态常量,如果变量没有被static修饰,它也是静态常量,不用final关键字修饰,也是静态常量 7 接口中的方法和常量无论是否添加public修饰符,默认的权限有且仅有一个,就是public 接口的使用: 1 接口代表一种能力,接口中可以定义N个方法,子类在进行实现的时候,必须要实现这些方法,将这些方法进行实现,就意味着赋予了方法能力。 关心实现类有何能力,而不关心实现细节 抽象类和接口的区别: 1 抽象类中的方法 可以有抽象方法也可以有普通方法,接口中只能包含抽象方法 2 抽象类需要使用abstract关键字来修饰,而接口使用interface关键字来修饰 3 子类使用extends来继承抽象类,使用implments来实现接口 4 子类继承抽象类必须要实现所有的抽象方法,普通方法可以不重写,而接口中的所有方法必须实现 5 抽象类中可以定义成员变量,而接口中只能定义静态常量 6 抽象类在子类实现的时候是单继承,而接口时多继承 7 抽象类和接口都不能实例化,但是抽象类中可以加抽象方法,抽象类中有构造方法,继承了抽象类的子类中通过super(参数列表)调 用抽象类中的构造方法,接口中没有构造方法 8 抽象类中可以实现接口并且不实现接口中的方法,接口只能继承接口,不能实现接口 注意:在实际的项目开发中,如果可以使用接口尽量使用接口,将单继承的父类留在最关键的地方


package com.yuzhu.InterfaceDemo;

public abstract class Door {
    public abstract void openDoor();
    public abstract  void closeDoor();
}

package com.yuzhu.InterfaceDemo;

public interface  Lock {
    static final int a =100;
    void openLock();
    void closeLock();

}

package com.yuzhu.InterfaceDemo;

public interface DoorBell {
    void photo();
}


package com.yuzhu.InterfaceDemo;

import java.util.concurrent.Callable;

public class LockDoor extends Door implements Lock,Callable ,DoorBell{

    @Override
    public Object call() {
        return null;
    }

    @Override
    public void openDoor() {
        System.out.println("open door");
    }

    @Override
    public void closeDoor() {
        System.out.println("close door");
    }

    @Override
    public void openLock() {
        System.out.println("openlock");
    }

    @Override
    public void closeLock() {
        System.out.println("close lock");
    }

    @Override
    public void photo() {
        System.out.println("拍照,存档");
    }
}


package com.yuzhu.InterfaceDemo;

public class TestInterface {
    public static void main(String[] args) {
        LockDoor lockDoor = new LockDoor();
        lockDoor.openDoor();
        lockDoor.closeDoor();
        lockDoor.openLock();
        lockDoor.closeLock();
        System.out.println(LockDoor.a);
//        Lockdoor.a = 300;
    }
}