接口(interface): 是与类并行的一个概念
Note:
1. 接口可以看做是一个特殊的抽象类。是常量与抽象方法的一个集合,不能包含变量、一般的方法。
2. 接口是没有构造器的。
3. 接口定义的就是一种功能。此功能可以被类所实现(implements)。 比如:class CC extends DD implements AA4. 实现接口的类,必须要重写其中的所有的抽象方法,方可实例化,若没有重写所有的抽象方法,则这此类仍为一个抽象类。
5. 类可以实现多个接口。-------java中类的继承是单继承的。6.接口与接口之间也是继承的关系,而且可以实现多继承。
ps: 5,6描述的是java中的继承的特点
7. 接口与具体的实现类之间也存在多态性。
代码示例1:
public class TestInterface { public static void main(String[] args) { System.out.println(AA.I); // AA.I = 13; } } interface AA { //常量:所有的常量都用public static final修饰,如果不写则会默认修饰 int I = 12; boolean FLAG = false; // int i; //抽象方法:所有的抽象方法都用public abstract修饰 void method1(); void method2(); public abstract void method3(); } abstract class BB implements AA { } class DD { } interface MM { void method4(); } class CC extends DD implements AA, MM { @Override public void method1() { } @Override public void method2() { } @Override public void method3() { } @Override public void method4() { } } //接口之间仍为继承关系!(多继承) interface JJ extends MM,AA { void method5(); } class GG implements JJ { @Override public void method4() { } @Override public void method5() { } @Override public void method1() { } @Override public void method2() { } @Override public void method3() { } }
代码示例2:
//接口与具体的实现类之间也存在多态性 public class TestInterface1 { public static void main(String[] args) { Duck d = new Duck(); TestInterface1.test1(d); TestInterface1.test2(d); TestInterface1.test3(d); Runner r = new Duck(); r.run(); } public static void test1(Runner r){ //Runner r = new Duck(); r.run(); //虚拟方法调用 } public static void test2(Swimmer s){ //Swimmer s = new Duck(); s.swim(); } public static void test3(Flier f){ //Flier f = new Duck(); f.fly(); } } interface Runner { public abstract void run(); } interface Swimmer { void swim(); } interface Flier { void fly(); } class Duck implements Runner,Swimmer,Flier{ @Override public void run() { System.out.println("鸭子屁股扭扭地走路"); } @Override public void swim() { System.out.println("红掌拨清波"); } @Override public void fly() { System.out.println("丑小鸭也可以变成白天鹅"); } }
结果:
鸭子屁股扭扭地走路
红掌拨清波
丑小鸭也可以变成白天鹅
鸭子屁股扭扭地走路
总结:
1. 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。
2. 通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩张功能
3. 接口主要用来定义规范。解除耦合关系。