接口
接口的概念:接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要...则必须能.."的思想。继承是一个"是不是”的is-a关系,而接口实现则是"能不能”的has-a 关系。
1.接口的理解:接口的本质是契约、标准、规范,就像我们的法律一样。制定好后大家都要遵守。
2.定义接口的关键字:interface
3. 接口内部结构的说明:
>可以声明
属性:必须使用public static final修饰
方法:jdk8之前,声明抽象方法,修饰为public abstract
jdk8:声明静态方法、默认方法
idk9:声明私有方法
>不能声明:构造器,方法块
package Test0607;
public class InterfaceTest {
public static void main(String[] args) {
System.out.println(Flyable.Min_SPEED);
System.out.println(Flyable.MAX_SPEED);
Bullet b1 = new Bullet();
b1.fly();
b1.attack();
//接口的多态性
Flyable f1 = new Bullet();
f1.fly();//f1只能调用FLyable的方法
}
}
interface Flyable{ //接口
//全局变量
//全局变量
public static final int Min_SPEED = 0;
int MAX_SPEED = 7900;
//方法可以省略public abstract 声明
void fly();//抽象方法
}
interface Attackable{//接口
public abstract void attack();
}
class Bullet implements Flyable ,Attackable{
public void fly(){
System.out.println("让子弹飞一会儿");
}
public void attack(){
System.out.println("子弹可以击穿身体");
}
}
//测试接口的继承关系
interface AA{
void method1();
}
interface BB{
void method2();
}
interface CC extends AA,BB{//子接口
}
class DD implements CC{
public void method1(){
System.out.println("接口一实现");
}
public void method2(){
System.out.println("接口二实现");
}
}
4接口和类的关系:实现关系
5.格式:class A extends SuperA implements B,C{}
A相较于SuperA来进,叫做子类
A相较于B,C来讲,叫做实现类。
6.满足此关系之后,说明:
>类可以实现多个接口。
>类针对于接口的多实现,一定程度上就弥补了类的单继承的局限性。
>类必须将实现的接口中的所有的抽象方法都重写(或实现),方可实例化。否则,此实现类必须声明为抽象类
>>>接口相当于父类,一个方法可以实现多个接口(继承)<<<
class DD implements CC{ public void method1(){ System.out.println("接口一实现"); } public void method2(){ System.out.println("接口二实现"); } }
7.接口与接口的关系:继承关系,且可以多继承
interface AA{ void method1(); } interface BB{ void method2(); } interface CC extends AA,BB{//子接口 }
8..接口的多态性: 接口名 变量名 = new 实现类对象
//接口的多态性
Flyable f1 = new Bullet();
f1.fly(); //f1只能调用FLyable的方法
区分抽象类和接口
>共性,都可以声明拍象方法
都不能实例化
>不同:1.抽象类一定有构造器。接口没有构造器
2.类与类之间继承关系,类与接口之间是实现关系,接口与接口之间是多继承关系
测试: 测试接口的应用、规范、多态
package Test0607;
public class USBTest {
public static void main(String[] args) {
Computer c1 = new Computer();
Printer p1 = new Printer();
System.out.println("创建接口实现类的对象");
//创建接口实现类的对象
c1.transferData(p1);//多态性
System.out.println();
System.out.println("创建接口实现类的匿名对象");
//创建接口实现类的匿名对象
c1.transferData(new Camera());
System.out.println();
System.out.println("创建 接口匿名 实现对象");
//创建 接口匿名 实现对象
USB u1 = new USB(){
public void Start(){
System.out.println("U盘开始工作");
}
public void Stop(){
System.out.println("U盘结束工作");
}
};
System.out.println();
System.out.println("创建 接口匿名 实现匿名对象");
//创建 接口匿名 实现匿名对象
c1.transferData(new USB() {
@Override
public void Start(){
System.out.println("扫描仪开始工作");
}
public void Stop(){
System.out.println("扫描仪结束工作");
}
});
c1.transferData(u1);
}
}
class Computer{
public void transferData(USB usb){
System.out.println("连接成功....");
usb.Start();
System.out.println("数据传输的细节操作....");
usb.Stop();
}
}
class Camera implements USB{
public void Start(){
System.out.println("相机开始工作");
}
public void Stop(){
System.out.println("照相机结束工作");
}
}
class Printer implements USB{
public void Start(){
System.out.println("打印机开始工作");
}
public void Stop(){
System.out.println("打印机结束工作");
}
}
interface USB{
//声明
//USB长、宽、高》》》常量
//方法
public abstract void Start();
public abstract void Stop();
}