接口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;
}
}