接口(interface)
普通类:只有具体实现抽象类:具体实现和规范(抽象方法) 都有!接口:只有规范!
为什么需要接口?
接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法。接口是完全面向规范的,规定了一批类具有的公共方法规范。
从接口的实现者角度看,接口定义了可以向外部提供的服务。
从接口的调用者角度看,接口定义了实现者能提供那些服务
如何定义接口?
**格式:**
[访问修饰符]
interface 接口名 [extends 父接口1,父接口2…] {
常量定义
方法定义
}
接口的本质探讨
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人;如果你是坏人,则必须欺负好人。
接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。
OOP的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计 模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。
接口使用要点
子类通过implements来实现接口中的规范接口不能创建实例,但是可用于声明引用变量类型。一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。接口中只能包含静态常量、抽象方法,不能有普通属性、构造方法、普通方法。常量必然是:public static final。 我们不加这些修饰符,也是这样。方法必然是:public abstrac。 我们不加这些修饰符,也是这样。接口完全支持多继承。和类的继承类似,子接口扩展某个父接口,将会获得父接口中所定义的一切。
public interface MyInteface {
String MAX_GREAD =
"BOSS";
int MAX_SPEED =
120;
void test01();
public int test02(
int a,
int b);
}
public interface Flyable {
int MAX_SPEED =
11000;
int MIN_HEIGHT =
1;
void fly();
}
interface Attack {
void attack();
}
class Plane implements Flyable{
@Override
public void fly() {
System.out.println(
"飞机靠发动机飞!");
}
}
class Man implements Flyable{
@Override
public void fly() {
System.out.println(
"跳起来,飞!");
}
}
class Stone implements Flyable, Attack{
int weight;
@Override
public void fly() {
System.out.println(
"被人扔出去,飞!");
}
@Override
public void attack() {
System.out.println(
"石头攻击!");
}
}
public class Test {
public static void main(String[] args) {
Flyable f =
new Stone();
f.fly();
}
}
public interface InterfaceA {
void aaa();
}
interface InterfaceB {
void bbb();
}
interface InterfaceC extends InterfaceA,InterfaceB {
void ccc();
}
class TestClass implements InterfaceC{
@Override
public void aaa() {
}
@Override
public void bbb() {
}
@Override
public void ccc() {
}
}