接口
接口优先原则:即可使用接口又可使用抽象类时,优先考虑使用接口。
1.定义:
接口就是抽象方法和全局常量的集合,在Java中接口使用interface关键字定义
interface IMessage{
public static final String MSG = "I am a biter" ; // 全局常量 public abstract void print() ; // 抽象方法
}
2.接口使用原则
2.1 接口中只有public权限
在接口中public、static、final、abstract均可以省略不写,抽象类中一个也别想跑。
规范:接口中的属性与方法不要加任何修饰符,public1也不加。
2.2 当子类既需要实现接口又需要继承抽象类时,先使用extends继承一个抽象类,而后使用implements实现多个接口。
当父类与父接口也有共同子类时,父类与父接口也可以通过子类相互转换。
2.3 抽象类可以使用implements实现若干个接口,反之,接口无法继承抽象类。
2.4接口之间可以使用extends继承多个父接口。
interface IMessage{
abstract void print() ; // 即便不写public,也是public
}
class MessageImpl implements IMessage {
void print() {
System.out.println("I am a biter") ; //权限更加严格了,所以无法覆写。
}
}
3.接口作用
3.1 定义标准(USB接口)
3.2 表示能力(行为)
3.3 在分布式开发中暴露远程服务方法
一个抽象类可以使用implements实现多个接口,但是接口不能继承抽象类。
抽象类实现接口
interface IMessage {
public void print() ;
}
abstract class News implements IMessage{
//News为抽象类,可以不实现IMessage中的抽象方法
// 抽象类中方法前面的abstract不能省略,否则就是普通方法
public abstract void getNews() ;
}
class MessageImpl extends News {
public void print() {
System.out.println("I am a biter") ;
}
public void getNews() {
System.out.println("I am News") ;
}
}
public class Test{
public static void main(String[] args) {
IMessage m = new MessageImpl() ;
m.print() ;
// MessageImpl是抽象类和接口的共同子类
News news = (News) m ;
news.getNews() ;
}
}
此时的结构关系属于三层继承
一个接口可以使用extends继承多个父接口
interface A {
public void printA() ;
}
interface B {
public void printB() ;
}
interface C extends A,B { // 接口多继承
public void printC() ;
}
class Impl implements C{
public void printA() {}
public void printB() {}
public void printC() {}
}
public class Test{
public static void main(String[] args) {
}
}
接口可以定义一系列的内部结构,包括:内部普通类,内部普通类,内部接口。
其中,使用static定义的内部接口就相当于一个外部接口。