接口的定义与使用
-
接口优先原则:在一个操作即可以使用抽象类又可以使用接口的时候,优先考虑使用接口。
-
接口的定义(JDK8以前):接口就是抽象方法与全局常量的集合(纯粹版的抽象类),interfance关键字定义接口
interface IMessage{
//全局常量
public static final String MSG ="I am a biter";
//抽象方法
public abstract void print();
}
接口命名:接口使用 I 开头
子类要想使用接口,implements实现接口,一个子类可以同时实现多个父接口(避免单继承局限,实现多继承)
父接口的相互转换,前提两个父接口拥有必须共同实现子类
interface IMessage{
//全局常量
public static final String MSG ="I am a biter";
//抽象方法
public abstract void print();
}
interface INews{
public abstract String getNews();
}
class MessageImpl implements IMessage,INews{
public void print(){
System.out.println(IMessage.MSG);
}
public String getNews(){
return IMessage.MSG;
}
}
public class Test{
public static void main(String[] args){
//子类向上转型,为父接口实例化对象
IMessage m=new MessageImpl();
//调用被子类覆写的方法
m.print();
//父接口相互转换
INews n=(INews) m;
System.out.println(n.getNews());
}
}
父接口相互转化示意图:
子类的命名规范:接口名为 IMyInterfance,子类实现此接口命名为:MyInterfaceImpl
接口的使用限制:
-
接口中只允许public权限(不顾是常量还是方法,都是public权限,即便不写权限修饰符也是public),在其余方法中默认为default权限。
interface IMessage{
abstract void print();
}
class MessageImpl implements IMessage{
//该方法默认为default权限,无法覆写父类
void print(){
System.out.println("Hello");
}
}
public class Test{
public static void main(String[] args){
IMessage m=new MessageImpl();
}
}
阿里编码规约:接口中不要出现任何修饰符,public也不要加
-
当子类既需要实现接口又需要继承抽象类时,请先使用extends集成一个抽象类,而后使用implements实现多个接口
-
一个抽象类可以使用implements实现多个接口,接口不能继承抽象类
-
接口可以使用extends继承多个父接口(接口多继承)
抽象类的应用:子类和基类为 is a 的关系
接口的应用场合
-
定义操作标准(USB标准,停车场标准)
-
表示能力
-
(了解)分布式开发中暴露远程方法
interface Car{
public void inter();
public void count();
public void charge();
}
class truck implements Car{
public void inter(){
System.out.println("进入一个卡车!");
}
public void count(){
System.out.println("开始计时!");
}
public void charge(){
System.out.println("收费!");
}
}
class Taxi implements Car{
public void inter(){
System.out.println("进入一个出租车!");
}
public void count(){
System.out.println("开始计时!");
}
public void charge(){
System.out.println("收费!");
}
}
public class Test{
public void Parking(Car car){
car.inter();
car.count();
car.charge();
}
public static void main(String[] args){
Test clint=new Test();
clint.Parking(new truck());
clint.Parking(new Taxi());;
}
}