概念
- 接口是和类一个概念,主要定义方法名称,不实现方法体(写方法-不实现)
- 接口里面只有抽象方法,可以省掉
-
基本使用
创建一个接口
public interface MyInterface{
//定义常量,public static final可以省略
//全:public static final int money=10;
int money=10;
//定义抽象方法,public abstract可以省略
//public abstract void say();
void say();
//封装方法
int getMoney();
需要创建一个类,实现接口
通过类创建对象,调用接口方法
public class Test001{
public static void main(String[] args){
MyObject myobject=new MyObject();
MyObject.say();
}
}
和抽象类的区别
相同点
- 都不可以直接创建对象,除非使用匿名内部类(主要)
- 可以作为引用类型(主要)
- 具备Object类中所定义的方法
- 可编译成字节码文件
- 都不可以直接创建对象,除非使用匿名内部类(主要)
不同点
语法格式(必须加default):提示(接口与接口也是可以继承的)
- 在创建接口的时候,可以使用default修饰默认的方法,是可以有实现体的
- 抽象方法必须被重写,但是默认方法可以不被重写,也可以重写默认方法(如果重写则不需要default)
- 在实现的类中,可以使用接口名称.super.默认方法名调用接口中的默认方法
-
静态方法
直接使用静态static进行修饰,不可以被实现类(子类)重写
-
接口的应用
接口可以使得不同的类之间的耦合性降低
- 如果不使用接口,不同类之间直接通信耦合性很紧密
- 在使用接口之后,接口之间的耦合性降低
- 在设计类的时候,如果出现了不同类之间的通信,首先应该想到接口进行接耦
电脑读取不同的设备的案例
- 如果不使用接口,那么电脑需要依赖很多其他不同的的设备,新增设备电脑类也需要更改
- 可以定义应该Usb接口,实现电脑类与其他类之间的接耦
- 设计一个Usb接口
- 直接在电脑中使用接口
- 在其他需要接入电脑的设备中实现接口
- 测试代码
- 总结代码 ```java /就可以定义一个Usb接口,实现电脑类和其他设备类的解耦 设计一个Usb接口/
- 设计一个Usb接口
public interface Usb { void work(); }
```java
//在其他需要接入电脑的设备中实现接口
public class MyDisk implements Usb {
public void work(){
System.out.println("移动硬盘正在工作");
}
}
//直接在电脑中使用接口
public class MyComputer2 {
Usb usb1;
Usb usb2;
public Usb getUsb1() {
return usb1;
}
public void setUsb1(Usb usb1) {
this.usb1 = usb1;
}
public Usb getUsb2() {
return usb2;
}
public void setUsb2(Usb usb2) {
this.usb2 = usb2;
}
public void work(){
if(usb1!=null){
usb1.work();
}
if(usb2!=null){
usb2.work();
}
System.out.println("这台电脑正常工作了");
}
}
//测试代码
public static void main(String[] args) {
MyComputer2 myComputer2 = new MyComputer2();
myComputer2.setUsb1(new MyDisk());
myComputer2.setUsb2(new MyFan());
myComputer2.work();
}
设计模式(重点)
概念
- -套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
- 可以简单理解为特定问题的固定解决方法。
-
工厂设计模式(重点)
概念
基本使用
创建一个工厂可以创建设备的接口 ```java /就可以定义一个Usb接口,实现电脑类和其他设备类的解耦 设计一个Usb接口/
public interface Usb { void work(); }
2. 所有的可以被这个工厂创建的类都需要实现这个接口
```java
//在其他需要接入电脑的设备中实现接口
public class MyDisk implements Usb {
public void work(){
System.out.println("移动硬盘正在工作");
}
}
创建工厂类实现设备的创建
public Usb createUsbDevice(int type){
switch(type){
case 1:
return new MyMouse();
case 2:
MyFan fan=new MyFan();
return fan;
case 3:
Usb usb=new MyDisk();
return usb;
}
}
在使用的时候直接通过工厂类创建对象