接口
1.接口的定义
接口相当于是一系列方法的声明,是一些方法特征的集合。可以把接口理解为制定一个公共定义的标准。
接口主要是使用关键字来interface定义,由于与类名称的定义的要求相同,为了区别接口通常在接口名称前面加入一个大写的I。
接口中可以定义抽象方法和全局常量,在JDK1.8之后,也可以定义普通方法和静态方法。定义普通方法的时候,要求追加default声明。
interface IMessage{
public static final String INFO="www.baidu.com";//全局常量
public abstract String getInfo();//抽象方法
public static IMessage getInstance(){
return new MessageImp();
}
public default void eat(){//普通方法
system.out.println("吃饭");
}
}
在接口中所有的抽象方法的权限都是public,可以省略不写,在接口中的abstract也可以省略,所以全局变量和抽象方法可以简化如下。
String INFO="www.baidu.com";
String getInfo() ;
2.接口在使用的时候,需要被子类实现,同时一个子类可以实现多个接口。同时如果子类不是抽象类,子类要覆写接口中所有的抽象方法。
interface IMessage{
public abstract String getInfo() ;
}
interface IChannel{
public abstract boolean Connect();
}
class MessageImp1 implements IMessage,IChannel{
public String getInfo() {
if (this.Connect()) {
return "发送得到一个消息";
}
return "通道创建失败";
}
public boolean Connect() {
System.out.println("消息已经发出,已经连接");
return true;
}
}
3.接口对象可以利用子类的向上转型来实现实例化
IMessage mig=new MessageImp1();
4.子类的对象可以实现任意父接口的转换。由于接口不允许继承父类,所有接口一定不是Object的子类,但是由于接口的子类一定是Object的子类,所以接口一定可以通过Object类接收。
Object obj =mig;
IChannel chl=(IChannel) obj;
5.一个接口可以通过extends继承多个接口,这被称为接口的多继承性。如果多个接口中的抽象方法重复。没有影响,如果普通方法重复,需要重写普通方法。
interface MessageImp2 extends IMessage,IChannel{
void fun();
}
6.接口和抽象类
联系:抽象类或者接口必须定义子类,子类一定要覆写抽象类或者接口中的全部抽象方法。通过子类的向上转型实现抽象类或者接口对象实例化。
区别:
1 定义上:抽象类: abstract class 抽象类名称{} 接口: interface 接口名称{}
2 组成上:抽象类中可以有构造方法,普通方法,静态方法,抽象方法,全局常量,普通常量, 而接口中只能有抽象方法,全局常量,普通方法,静态方法。抽象类比接口多构造方法和普通常量。
3 权限上:抽象类可以使用各种权限定义 ,而接口只能使用public定义。
4 子类使用上:抽象类的子类通过extends可以继承一个抽象类,而接口的子类使用implements可以实现多个接口
5 两者关系上 抽象类可以实现若干个接口,而接口不允许继承抽象类,但是允许继承多个父接口
实现接口的可能是抽象类,一个抽象类可以实现多个接口,而一个普通类只能继承一个抽象类并且可以实现多个父接口,在继承与实现都有的情况下,要求先继承后实现。在接口和抽象类都可以使用的情况下,由于接口可以避免单继承的局限,一般优先选用接口。