接口 (主要注意接口的访问修饰符,在子类继承的时候,方法必须声明为public的)
接口从本质上说,是一种特殊的抽象类,只包含常量和方法的定义,而没有变量和方法的实现。也可以完全没有常量和方法,就是一个声明,这样的空接口叫标示接口,是用来通知编译器实现了该接口的类具备了某种功能,比如serialiable。
接口里面所有的方法都是抽象的。所有的方法都是抽象方法,而不需要写实现,也不能写实现。接口里面的方法必然是public abstract。
在接口中所有的方法都不可以是native、static 、final 、synchronized 、private 、protected的。
接口中可以有数据成员,但是必须是public static final,换句话说就是常量。
接口也可以继承 extends,比如 interface A extends B
接口还可以多重继承
Interface A extends B,C,D
一个类可以实现多个接口,而且都是抽象方法,还都是public的:
class A inplements B,C,D
多个类可以实现同一个接口:
class A inplements C
class B inplements C
接口也可以实现多态性(和实现类之间)也就是说,可以声明接口的父类引用去指向实现子类的对象。实际上,在这种情况下,可以把接口当成实现子类的一个父类来看待。
Java的bug?:
如果一个类实现两个接口,但是两个不同的接口中有两个同名但是返回值不一样的方法。(只能采用内部类解决)
public interface Valuable {
public double getMoney();
}
interface Protectable{
public void beProtected();
}
interface A extends Protectable{
void m();
void getMoney();
}
class Hen implements A, Valuable{
public void m(){
}
public void beProtected(){
}
public void getMoney(){
}
public double getMoney(){
return 1000;
}
}