多态(接口)
在java中继承是单继承关系,若想拥有更多父类,考虑使用接口进行实现
用法:使用interface来修饰
接口可以包含多个方法,并且方法均为抽象方法,且不可实现,其抽象方法的实现必须在子类中引入接口进行实现
特征:
- 接口中的所有方法都是抽象方法,不可实现
- 接口中所有方法和变量的访问修饰权限是public,而不是default
- 接口不能被实例化,必须由子类实现后通过子类实例化
- 接口的子类必须实现接口中的所有方法(毕竟只包含抽象方法),,,不同于抽象类(抽象类有抽象方法也有普通方法,,其中子类只需要实现抽象方法) 即抽象方法都必须在子类中进行实现
- 子类可以拥有多个接口
- 接口中的变量都是静态常量,,即在接口中的变量前面都默认拥有 public static final 关键字
- 可以定义抽象类实现接口中的部分方法,而子类则需要将抽象方法全部实现
接口VS抽象类:
- 接口中全为抽象方法,让规范和具体实现很好的分离,降低耦合性
- 接口是规范,表示一种能力,“如果你是…则必须…”(如果你是飞机,就必须能飞)
CPU(接口):
package abd.ProgInterface;
public interface CPU {
String brand();
int Hz();
}
HighDisk(接口):
package abd.ProgInterface;
public interface HighDisk {
String capacity();
}
CPU接口实现:
package abd.ProgInterface;
public class IntelCPU implements CPU {
@Override
public String brand() {
return "Intel";
}
@Override
public int Hz() {
return 3;
}
}
package abd.ProgInterface;
public class LongxinCPU implements CPU {
@Override
public String brand() {
return "鲲鹏";
}
@Override
public int Hz() {
return 5;
}
}
HighDisk接口实现:
package abd.ProgInterface;
public class HhighDisk implements HighDisk {
@Override
public String capacity() {
return "500000GB";
}
}
package abd.ProgInterface;
public class LowDisk implements HighDisk {
@Override
public String capacity() {
return "20000GB";
}
}
Computer类(逻辑实现模块):
package abd.ProgInterface;
public class Computer {
public Computer(CPU cpu,HighDisk disk){
System.out.println("品牌:"+cpu.brand()+" 主频:"+cpu.Hz()+"GHz");
System.out.println("硬盘容量:"+disk.capacity());
}
}
测试:
package abd.ProgInterface;
public class Test {
public static void main(String[] args) {
//接口的多态实现,接口不能直接实例化,必须有相应的子类进行实现操作,通过子类进行实例化相应接口
//CPU cpu = new LongxinCPU();
CPU cpu = new IntelCPU();
HighDisk disk = new LowDisk();
Computer computer = new Computer(cpu,disk);
}
}