接口
接口的概念
生活中的接口: usb hdmi vga dp type-c
usb接口:1994年 由微软 IBM 因特尔 共同指定的一种标准协议
程序中的接口:特殊的抽象类 规定了接口的使用者和接口实现者之间的规范
接口的定义和特点
定义的语法:interface 接口名{}
特点:1.接口中的属性都是公开静态常量 都是用publicstaticfinal 修饰的2.接口中的方法都是公开抽象方法 都是用publicabstract 修饰的3.接口中没有构造方法
注意:
接口中属性如果没有加修饰符 默认是公开静态常量
接口中方法如果没有加修饰符 默认是公开抽象方法
案例:packagecn.baizhi.day12;publicclassDemo{}abstractclassTest{int a=10;staticint b=20;publicstaticfinalintC=40;publicabstractvoidm1();publicvoidm2(){}publicstaticvoidm3(){}publicTest(){super();}}interface IA{publicstaticfinalintA=10;publicabstractvoidm1();}
接口的实现类
语法:
实现类implements 接口{}
注意:1.如果一个类实现了一个接口,如果这个类不想成为抽象类,那么这个类必须实现接口中所有方法2.接口没有构造方法 也没有对象 更不能手动去new
案例:定义一个类 实现这个接口packagecn.baizhi.day12;publicclassDemo{}abstractclassTest{int a=10;staticint b=20;publicstaticfinalintC=40;publicabstractvoidm1();publicvoidm2(){}publicstaticvoidm3(){}publicTest(){super();}}interface IA{publicstaticfinalintA=10;publicabstractvoidm1();}abstractclassClassAimplements IA{}
案例:packagecn.baizhi.day12;publicclassDemo{publicstaticvoidmain(String[] args){IA aIa=newClassA();
aIa.m1();}}abstractclassTest{int a=10;staticint b=20;publicstaticfinalintC=40;publicabstractvoidm1();publicvoidm2(){}publicstaticvoidm3(){}publicTest(){super();}}interface IA{int a=10;voidm1();}classClassAimplements IA{publicvoidm1(){System.out.println("实现类的m1");}publicvoidm2(){}}
接口和类之间的关系
类和类之间
类和类之间是单继承 可以多层继承
接口和接口之间
接口和接口之间是多继承关系 一个接口可以有多个父接口
语法:interface 子接口名extends 父接口1,父接口2{}
注意:当一个类实现的接口有多个父接口时 必须实现所有接口中的方法
案例: 定义一个接口 IA 定义一个 IB接口 定义IC接口 继承 IA IBpackagecn.baizhi.day12;publicclassDemo{publicstaticvoidmain(String[] args){IA aIa=newClassA();IB bIb=newClassA();IC cIc=newClassA();
aIa.m1();
bIb.m2();
cIc.m1();
cIc.m2();
cIc.m3();}}interface IA{voidm1();}interface IB{voidm2();}interface ICextends IA,IB{voidm3();}classClassAimplements IC{@Overridepublicvoidm1(){System.out.println("m1");}@Overridepublicvoidm2(){System.out.println("m2");}@Overridepublicvoidm3(){System.out.println("m3");}}
接口和类之间
接口和类之间是多实现的关系 一个类可以实现多个接口
语法:class 类名implements 接口1,接口2{
}
注意:当一个类实现了多个接口 这个类必须实现所有接口的方法
案例: 在上一个案例的基础上 再定义 ID接口ClassA 实现 IC 和 ID 接口packagecn.baizhi.day12;publicclassDemo{publicstaticvoidmain(String[] args){IA aIa=newClassA();IB bIb=newClassA();IC cIc=newClassA();ID dId=newClassA();
aIa.m1();
bIb.m2();
cIc.m1();
cIc.m2();
cIc.m3();
dId.m4();}}interface IA{voidm1();}interface IB{voidm2();}interface ICextends IA,IB{voidm3();}interface ID{voidm4();}classClassAimplements IC,ID{@Overridepublicvoidm1(){System.out.println("m1");}@Overridepublicvoidm2(){System.out.println("m2");}@Overridepublicvoidm3(){System.out.println("m3");}
s@Overridepublicvoidm4(){System.out.println("m4");}}
综合案例:描述一个最复杂的类 一个类继承一个类 实现了多个接口 其中的一个接口有多个父接口
注意:当一个类继承一个类,又实现了接口,必须先继承后实现接口packagecn.baizhi.day12;publicclassDemo{publicstaticvoidmain(String[] args){IA aIa=newClassA();
aIa.m1();IB bIb=newClassA();
bIb.m2();IC cIc=newClassA();
cIc.m1();
cIc.m2();
cIc.m3();ID dId=newClassA();
dId.m4();ClassB classB=newClassA();
classB.m5();ClassA classA=newClassA();
classA.m1();
classA.m2();
classA.m3();
classA.m4();
classA.m5();
classA.m6();ClassA classA=newClassA();System.out.println(classAinstanceof IA);System.out.println(classAinstanceof IB);System.out.println(classAinstanceof IC);System.out.println(classAinstanceof ID);System.out.println(classAinstanceofClassB);}}interface IA{voidm1();}interface IB{voidm2();}interface ICextends IA,IB{voidm3();}interface ID{voidm4();}classClassB{publicvoidm5(){System.out.println("ClassB m5");}}classClassAextendsClassBimplements IC,ID{@Overridepublicvoidm1(){System.out.println("m1");}@Overridepublicvoidm2(){System.out.println("m2");}@Overridepublicvoidm3(){System.out.println("m3");}@Overridepublicvoidm4(){System.out.println("m4");}publicvoidm5(){System.out.println("ClassA m5");}publicvoidm6(){System.out.println("自己的方法 m6");}}
接口的应用
扩展子类的功能
案例: 定义一个动物类 定义n个子类 狗 猫 鱼 鸭子 老虎 狼。。。。packagecn.baizhi.day12;publicclassTestAnimal{publicstaticvoidmain(String[] args){Animal[] animals={newDog(),newDog(),newDog(),newDog(),newCat(),newCat(),newCat(),newCat(),newCat(),newFish(),newFish(),newFish(),newFish(),newFish(),newTiger(),newTiger(),newTiger(),newTiger(),newTiger(),newWolf(),newWolf(),newWolf(),newWolf(),newWolf(),newDuck()};int count=0;for(int i=0; i< animals.length; i++){if(animals[i]instanceofPet){
count++;System.out.println(animals[i]);}}System.out.println("宠物的个数:"+ count);}}interfacePet{}abstractclassAnimal{publicabstractvoideat();publicabstractvoidsleep();}classDogextendsAnimalimplementsPet{@Overridepublicvoideat(){}@Overridepublicvoidsleep(){}}classCatextendsAnimalimplementsPet{@Overridepublicvoideat(){}@Overridepublicvoidsleep(){}}classFishextendsAnimalimplementsPet{@Overridepublicvoideat(){}@Overridepublicvoidsleep(){}}classDuckextendsAnimal{@Overridepublicvoideat(){}@Overridepublicvoidsleep(){}}classTigerextendsAnimal{@Overridepublicvoideat(){}@Overridepublicvoidsleep(){}}classWolfextendsAnimal{@Overridepublicvoideat(){}@Overridepublicvoidsleep(){}}
案例: 定义一个手机类 vivo(拍照