接口(interface)
**接口就是规范,定义一组规则。体现了现实世界中“如果你是。。。。,就必须做到。。的思想
接口的本质是契约,就像我们的法律一样,我们必须遵守。
面向对象的精髓,是对对象的抽象。最体现这一点的就是接口。为什么我们讨论设计模式都只针对具备抽象能力的语言(如c ++,Java,c#等),就因为设计模式所研究的,实际上就是如何合理的去抽象。**
接口的作用
为什么需要接口?接口和抽象类有什么区别?
接口就是”比抽象类还抽象的抽象类“,可以更加规范的对子类进行约束。全面地专业地实现了”规范和具体实现的分离“
抽象类还提供某些具体实现,而接口不提供任何实现。接口中所有方法都是抽象方法,接口完全面向规范,规定了一批具有类的公共方法规范
从接口实现者角度看,接口定义了可恶意向外并不提供的服务
从接口调用者角度看,接口定义了实现者可以提供哪些服务
接口是两个模块之间通信的标准,通信的规范。如果吧你要设计的模块之间的的接口定义好,就当与完成系统的设计大纲,剩下的就是添砖加瓦的具体实现。
接口和实现类不是父子关系,是实现规则的关系。
区别:
1》普通类:具体实现
2》抽象类:具体实现,规范(抽象方法)
3》接口:规范
定义接口的详细说明:
1、**访问修饰符:**只能是public
2、**接口名:**和类名采用相同命名机制
3、**extends:**接口可以多继承
4、**常量:**接口中属性只能使常量,总是:public static final修饰,不写也是
5、**方法:**接口中的方法只能:public abstract。省略的话,也是public abstract。
要点:
1》子类通过implements来实现接口中的规范
2》接口不能创建实例,但是可用于声明引用变量类型。
3》一个类实现类接口,就必须实现接口中所有的方法,并且这些方法必须是public的
4》JDK1.8(不含1.8)之前,接口中只能包含静态常量,抽象方法,不能有普通属性,构造方法,普通方法
5》JDK1.8(含1.8),接口中包含普通的静态方法,默认方法
/*
* 蝙蝠侠和小丑的接口
*/
package cn.test.Interface;
public class TestInterface2 {
public static void main(String[]args){
Batman b = new Batman();
Joker j = new Joker();
b.unbelieving();
b.different();
b.deterrent();
b.symbol();
j.Smile();
j.different();
j.deterrent();
j.symbol();
}
}
interface Dark{ //接口1:黑暗
void unbelieving(); //多疑
}
interface Chaos{ //接口2:混沌
void Smile(); //微笑
}
interface Lunatic{ //接口3:疯子
void different(); // 异类
}
interface Fear{ //接口4:恐惧
void deterrent(); //威慑
}
interface Flag{ //接口5:标志
void symbol(); //象征
}
class Batman implements Dark,Lunatic,Fear,Flag{
public void unbelieving(){
System.out.println("Dark knight:");//黑暗骑士:
System.out.println("Batman always has the cords!");
} //蝙蝠侠永远有底牌
public void different(){
System.out.println("The night kingt!");
} //黑夜骑士
public void deterrent(){
System.out.println("Fear in the skies over Gotham City!");
} //哥谭市上空的恐惧
public void symbol(){
System.out.println("Because I am Batman!");
} //因为我是蝙蝠侠
}
class Joker implements Chaos,Lunatic,Fear,Flag{
public void Smile(){
System.out.println("Mr.J:");// J先生:
System.out.println("Can you introduce meas...Joker?");
} //你能介绍小丑么?
public void different(){
System.out.println("There is no punchline .It is not a joke.");
} //这里没有笑梗,这不是笑话。
public void deterrent(){
System.out.println("A big smile.");
} // 一个大大的微笑.
public void symbol(){
System.out.println("Why so serious?");
} //为什么这么严肃?
}
Dark knight:
Batman always has the cords!
The night kingt!
Fear in the skies over Gotham City!
Because I am Batman!
Mr.J:
Can you introduce meas...Joker?
There is no punchline .It is not a joke.
A big smile.
Why so serious?