接口
接口的声明
接口是一种特殊的抽象类,使用interface声明
定义一个接口A,如下所示
public interface A {
}
接口的特性
1.不可以实例化对象但可以向上转型或向下转型,以及不能定义构造方法
public interface A{
public A(){} //定义了构造方法,报错
}
public class Test {
public static void main(String[] args) {
A a=new A();//实例化接口,报错
}
}
2.接口里的属性(变量)都为常量,定义的时候必须赋值
public interface A{
int a; //没有赋值,报错
int b = 1; //正确
}
3.接口中的所有的方法都是抽象方法,可以不用abstract修饰
public interface A{
void method1();
abstract void method2();
void method3(){}//接口中只能写抽象方法,报错
}
4.接口中只可以使用public权限,public也是接口中的默认权限
public interface A{
public int a = 10;
private int b = 10; //使用了private权限,报错
protected int c = 10; //使用了protected权限,报错
}
5.接口和类之间,单继承,多实现。实现接口使用implements关键字
public class Father{}//父类
public interface A extends Father{}
//接口A,继承了父类Father 单继承
public interface A2 {} //接口2
public class A1 implements A,A2{}
//类A1,使用implements关键字实现了接口A和A2
//中间使用逗号分隔,可实现任意个接口 多实现
6.接口之间可以多继承
public interface A{}
public interface B{}
public interface C{}
public interface D{}
public interface E extends A,B,C,D{}
//接口E,继承了接口A,B,C,D 接口之间多继承
7.一个类只要实现了接口,就必须对实现的接口中所有的方法进行强制重写;除非这个类也是抽象类
public interface A{
void method1();
void method2();
}
public class B implements A{
@Override
public void method1() {} //强制重写方法1
@Override
public void method2() {} //强制重写方法2
}
public abstract class C implements A{} //抽象方法不用强制重写接口中的方法
接口的使用方法
需要满足:一个类拥有某个能力 能力指的就是接口
例如:
所有手机可以打电话,发短信
但智能手机除了打电话发短信以外,还可以上网,拍照,老人机也可以拍照,但不能上网
那么就适合把打电话、发短信定义到父类Phone中,把拍照这种特殊能力(功能)定义成一个接口,让具有拍照能力的手机来实现它
//父类 手机类
public class Phone{
public abstract sentMessage();//发短信
public abstract calll();//打电话
}
//接口, 拍照
public interface Photo{
void takePhoto();
}
//子类智能手机,继承手机类,实现了拍照接口
public class SmartPhone extends Phone implements Photo{
@Override
public void sentMessage(){} //重写发短信方法
@Override
public void call(){} // 重写打电话方法
@Override
public void takePhoto(){} //重写拍照方法
public void internet(){} //独有的上网功能
}
//子类老人机,继承手机类,实现拍照接口
public class OldPhone extends Phone implements Photo{
@Override
public void sentMessage(){} //重写发短信方法
@Override
public void call(){} // 重写打电话方法
@Override
public void takePhoto(){} //重写拍照方法
}