定义:
-
Java接口是一系列方法的声明,是一些方法特征的集合,
使用方法:
-
使用interface进行修饰。
-
接口中可以包含多个方法,且方法跟抽象类中的抽象方法一样,可以不写实现,子类再实现代码逻辑
-
子类实现接口使用implements关键字。
-
接口代表一种能力,接口中可以定义N多个方法,子类必须实现这些方法,将这些方法实现,意味着具有了方法的能力。(锁,开锁和关锁的能力)(手机:拍照,视频,语音的能力)
-
接口是一种约定,体现在接口名称和注释上。(插座:插座的大小,间距,额定电压)(java连接各种数据库,只需要定义一个接口,有各个数据库厂商来进行具体的实现)
-
有些接口只有名称
-
方法的实现通过注释来约定
-
-
可以定义一个新的接口,用extends去继承一个已有的接口。 interface extends interface
-
可以定义一个类,用implements去实现一个接口中所有方法 class implements interface
-
可以定义一个抽象类,用implements去实现一个接口中的部分方法.abstract implements interface
使用注意事项:
-
接口中的方法默认是public abstract,所以public abstract可以省略不写。
-
接口中的变量默认是public static final,所以public static final 可以省略不写。
-
默认值在编译器编译的时候,都会给加上的,但是为了严谨,我们要自己添加上
接口特征
-
接口中所有的方法都是抽象方法,不包括方法的实现
-
接口不可以被实例化
-
接口的子类必须要实现接口中的所有方法。跟抽象类有所不同,抽象类中的抽象方法不需要被非抽象子类实现
-
子类可以实现多个接口
-
接口中方法和常量无论是否添加public修饰,默认的权限有且仅有一个,就是public
面向接口编程
-
关心实现类有何能力,而不关心实现细节
-
面向接口的约定而不考虑接口的具体实现
接口和继承的关系
-
接口:has a
-
继承:is a
C++与JAVA
-
C++支持多重继承,java支持单重继承
-
C++多重继承的危险性在于一个类可能继承了同一个方法的丌同实现,会导致系统崩溃。
-
Java中,一个类只能继承一个类,但同时可以实现多个接口,既可以实现多重继承的效果和功能,也避免的多重继承的危险性。
接口与继承的区别
-
父类中可以有构造方法,接口中不能有构造方法。
接口和抽象类的区别
-
抽象类中的方法可以包含抽象方法,也可以有普通方法。但是接口中只能包含抽象方法。
-
抽象类使用abstrat关键字修饰,接口使用interface修饰
-
子类使用抽象类用extends,子类实现接口用implements
-
子类继承抽象类的时候,必须实现所有的抽象方法,普通方法可以不重写。而接口中的所有方法必须实现。
-
抽象类中可以定义成员变量,而接口中只能定义静态常量
-
抽象类在子类实现的时候是单继承,而接口是多继承
-
抽象类和接口都不能实例化,但是抽象类中可以有构造方法,而接口中不能有构造方法。
-
抽象类中可以实现接口,并且不实现接口中方法,而接口只能继承接口,不能实现接口。
注意:在实际的项目开发过程中,如果可以使用接口,尽量适用接口,将单继承的父类留在最关键的地方。
代码实现
实现功能1——开锁,关锁
门有“开”和“关”的功能,锁有“上锁”和“开锁”的功能 。将门和锁分别定义为抽象类。将门定义为抽象类,锁定义为接口 防盗门继承门,实现锁的接口
Door类
public abstract class Door {
public Door() {
}
public abstract void openDoor();
public abstract void closeDoor();
}
Lock
public interface Lock {
int a = 10;
void openLock();
void closeLock();
}
LockDoor类
public class LockDoor extends Door implements Lock {
public LockDoor() {
}
public void openDoor() {
System.out.println("开门");
}
public void closeDoor() {
System.out.println("关门");
}
public void openLock() {
System.out.println("开锁");
}
public void closeLock() {
System.out.println("上锁");
}
public static void main(String[] args) {
System.out.println(10);
}
}
LockDoorTest类
public class LockDoorTest {
public LockDoorTest() {
}
public static void main(String[] args) {
LockDoor lockDoor = new LockDoor();
lockDoor.openDoor();
lockDoor.openLock();
lockDoor.closeLock();
lockDoor.closeDoor();
}
}
实现功能2——用程序描述USB接口
USB类
public interface USB {
public void dataTransfer();
}
Mouse类
public class Mouse implements USB {
@Override
public void dataTransfer() {
System.out.println("鼠标来点击屏幕");
}
}
UPan类
public class UPan implements USB {
@Override
public void dataTransfer() {
System.out.println("U盘可以传输数据");
}
}
Fun类
public class Fun implements USB {
@Override
public void dataTransfer() {
System.out.println("可以给风扇提供电");
}
}
Test类
public class Test {
public static void main(String[] args) {
Mouse mouse=new Mouse();
mouse.dataTransfer();
UPan uPan=new UPan();
uPan.dataTransfer();
Fun fun=new Fun();
fun.dataTransfer();
}
}
实现功能3——组装一台计算机
采用面向接口编程思想组装一台计算机。 –计算机的主要组成部分有: ▪CPU ▪硬盘 ▪内存
接口CUP
public interface CPU {
String getBrand();
String getHZ();
}
接口HardDisk
public interface HardDisk {
public String getVolum();
}
IntelCPU类
public class IntelCPU implements CPU {
@Override
public String getBrand() {
return "intel";
}
@Override
public String getHZ() {
return "2000";
}
}
JSDHardDisk类
public class JSDHardDisk implements HardDisk {
@Override
public String getVolum() {
return "金士顿200G";
}
}
Computer类
public class Computer {
public void show(CPU cpu,HardDisk hardDisk){
System.out.println("计算机的信息如下:");
System.out.println("CPU的品牌是:"+cpu.getBrand()+",主频是:"+cpu.getHZ());
System.out.println("硬盘容量是:"+hardDisk.getVolum());
}
}
Test类
public class Test {
public static void main(String[] args) {
Computer computer=new Computer();
CPU cpu=new IntelCPU();
HardDisk hardDisk=new JSDHardDisk();
computer.show(cpu,hardDisk);
}
}