学习记录–接口与实现
接口分为接口声明和接口体
接口体中包含常量和抽象方法两个部分。
接口体只有抽象方法,没有普通方法
接口体的所有常量和抽象方法的访问权限一定是public
public interface Demo {
public static final int MAX=100; //=>int MAX=100
public abstract void add();//=>void add()
public abstract float max(float x,float y);
}
类实现接口,一个类实现多个接口,使用逗号分隔
如果一个非抽象类实现了接口,那么这个类必须重写这个接口的所有方法
接口中的方法一定是public abstract
但如果是一个抽象类实现了接口,可以不实现接口中的所有方法,就是抽象类既可以重写接口中的方法是,也可以直接拥有接口中的方法
程序可以用接口访问接口常量
interface前加public:公共接口;不加友好接口
如果父类实现某个接口,那么子类自然实现某个接口
接口也可以继承,由于接口中的常量和方法都是public ,所以继承父接口中的全部方法和常量
接口的UML图:三层,1名字层2常量层3方法层
接口回调;把实现接口的类的对象的引用赋值给接口变量该接口变量上就可以调用被该类实现的接口方法
备注:接口无法调用类中的其他的非接口方法
接口产生的多态是只不同的类在是实现同一个接口的时候可能有不同的实现形式,那么接口变量在回调接口的时候就可能具有多种形态
如果一个方法的参数是接口类型,我们可以把将任何实现该接口的类的实例的引用传递给该接口的参数,那么接口参数就就可以回调类实现的接口方法
public class Chinese implements SpeakHello {
@Override
public void speakHello() {
System.out.println("你好");
}
}
public class English implements SpeakHello {
@Override
public void speakHello() {
System.out.println("hello");
}
}
public class Example6_5 {
public static void main(String[] args) {
KingHello kingHello = new KingHello();
kingHello.lookHello(new Chinese());
kingHello.lookHello(new English());
}
}
abstract类与接口的比较:
1)abstract和接口都可以由abstract方法
2)接口中只可以由常量是,abstract类中可以常量也可以有变量
3)abstract类中可以有非abstract方法,而接口不可以,只能由抽象的方法
面向接口编程
抽象类将其抽象方法的实现交给子类,而接口将其抽象方法交给它的实现类
使用接口进行程序设计的时候重要的思想是接口回调