第九章 接口
@;主要内容:接口的概念,接口的多继承,子类的多实现 ,使用接口的好处
#接口的概念:接口是特殊的抽象类
接口中 1,属性必须是公开静态常量 2.方法必须是公开抽象方法(接口中没有抽象方法)
interface MyInterface{
public static final int value=10; //常量
public abstract void m1();
}
上面是接口的标准写法 但实际中一般都写成
interface MyInterface{
int value=10; //此处表示常量
void m1();
}
#implements 关键字 就类似于子类继承抽象方法
#接口不能创建对象,只能声明了引用,声明了引用让引用指向它的子类
#接口的继承:
interface A{ interface B extends A{
void m1(); void m2;
} }
Class MyClass implements B{
public void m1(){};
public void m2(){};
}
MyClass m1=new MyClass()
A b2=new MyClass();
B b3=n32 MyClass();
通过b2只能访问m1()方法,通过m3可以访问m1,m2方法
#注意:实现接口就必须全部实现完里面的全部抽象方法,如果还有没有实现的方法,那么这个类还是抽象类
#接口的多继承
interface IA{ interface IB{ interface IC extends IA,IB{
void m2() void m3();
void m1(); } }
}
#子类的多实现 1,接口之间可以多继承,多个之间用逗号分隔 2,子类可以多实现接口 3,子类的多实现同时还可以继承一个父类(extends 在implements之前)
#,接口的好处:1,增加程序的通用性(方法的参数要声明成接口类型。方法的返回值要声明成接口型)
2,接口实现了特殊的多继承,以后抽象类用的比较少,多使用接口
3,解耦合
例如:有个台灯,装红灯和绿灯
台灯-》红灯 当装率灯泡是台灯的内部构造都要改,因为台灯和灯泡的关系太密切
台灯—》接口—》灯泡 灯泡实现了接口 不论装什么颜色的灯泡,内部构造都不用改,修改代码的量减少了 方便多了,
不用接口:public class GreenBuble {
public void light(){
System.out.println("green");
}
}
public class Lamp {
GreenBuble greenBuble;
RedBuble redBuble;
public void setRedBuble(RedBuble redBuble) {
this.redBuble = redBuble;
}
public void trunOn1(){
redBuble.light();
}
public void setGreenBuble(GreenBuble greenBuble) {
this.greenBuble = greenBuble;
}
public void trunOn(){
greenBuble.light();
}
}
public class RedBuble {
public void light(){
System.out.println("red");
}
}
public class Test {
public static void main(String[] args) {
GreenBuble greenBuble1=new GreenBuble();
RedBuble redBuble1=new RedBuble();
Lamp lamp1=new Lamp();
lamp1.setGreenBuble(greenBuble1);//现在安得是绿灯,准备想安红灯
//lamp1.setGreenBuble(RedBuble);在这里直接安红灯不可以,要到台灯里面改构造
lamp1.setRedBuble(redBuble1);
lamp1.trunOn1();//红灯也亮了
lamp1.trunOn();
}
}
代码如下:接口的好处1,public interface Buble { //先定义了接口
public abstract void light();
}
public class GreenBuble implements Buble {
@Override
public void light(){
System.out.println("green");
}
}
package net.nyist.com.ch09.ex02;
public class Lamp {
Buble buble;
public void setBuble(Buble buble) {
this.buble = buble;
}
public void trunOn(){
buble.light();
}
}
public class RedBuble implements Buble{
public void light(){
System.out.println("red");
}
}
public class Test {
public static void main(String[] args) {
Lamp lamp=new Lamp();
Buble buble=new GreenBuble();
lamp.setBuble(buble);
lamp.trunOn();
Buble buble2=new RedBuble();
lamp.setBuble(buble2);
lamp.trunOn();
Buble buble3=new BlueBuble();
lamp.setBuble(buble3);
lamp.trunOn();
}
}
通过上面的可以体现出来接口的好处