为什么使用接口?
问题
要求实现防盗门的功能
分析
门有开和关的功能,锁有上锁和开锁的功能
将门和锁分别定义为抽奖类
那么问题就是防盗门即继承了门的同时又继承了锁,而Java的继承是单继承,接口可多继承。
解决
将门定义为抽奖类,锁定义为接口
防盗门继承门,实现锁的接口
解决了多继承,更好的使用多态
什么是接口?
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现
因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
如何使用接口?
[ public ] interface 接口名 [ extends 超接口表 ] { 接口体 }
接口是一种只由常量定义和抽象方法组成的特殊类。
接口体中的内容是一系列常量的定义和方法的定义,不提供方法的实现(即没有方法体),用分号结尾。
接口的所有变量都默认是final static属性,所有的方法都是public adstract属性。
如果一个类要实现某个接口,必须实现接口的所有方法。
面向接口编程
定义Door抽象类:具有开门,关门的功能
定义Lock接口:具备上锁,开锁的能力
编写TheftproofDoor类:继承类实现接口
编写测试类:让防盗门关门,上锁,开锁,开门
package javaTest4;
//抽象类 门
abstract class Door{
public abstract void open();
public abstract void close();
}
//接口:锁
interface Lock{
int i=1; //都是静态常量
public void lock(); //都是抽象方法
public void unlock();
}
//接口 照相机
interface Crama{
public void takePhotos();
}
//防盗门类
class FDoor extends Door implements Lock,Crama{
@Override
public void open() {
System.out.println("开门");
}
@Override
public void close() {
System.out.println("关门");
}
@Override
public void lock() {
System.out.println("上锁");
}
@Override
public void unlock() {
System.out.println("开锁");
}
@Override
public void takePhotos() {
System.out.println("开门时,拍照");
}
}
public class test5 {
public static void main(String[] args) {
FDoor fd=new FDoor();
fd.close();
fd.lock();
fd.unlock();
fd.open();
fd.takePhotos();
}
}
必须知道的接口特性
接口不可以被实例化,常作为类型使用
接口是一种特殊的抽象类
实现类必须实现接口的所有方法
实现类可以实现多个接口(Java中的多继承)
接口中的变量都是静态常量
接口默认是public