接口就是规范,定义的是一组规则,体现了现实世界中“如果你是...则必须你能....”的思想。
如果你是天使,则必须能飞。如果你是汽车,则必须能跑。接口的本质就是契约,就像我们人间
的法律一样,大家都要遵守。接口定义说明:1、访问控制符:只能是public或者默认。2、接口名:和类名采用相同命名机制。3、extends:接口可以多继承。4、常量:接口中的属性只能是常量,总是:public static final 修饰,不写也是。5、方法:接口中的方法只能是:public abstract。不写也是。要点:1、子类通过implements来实现接口中的规范。2、接口不能创建实例,但是可用于声明引用变量类型。3、一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的4、JDK1.8(不含8)之前,接口中只能包含静态常量,抽象方法,不能有普遍性,构造方法,普通方法。5、JDK1.8(含8)后,接口中包含普通的静态方法,默认方法
验证:
/*** 使用接口,定义一个接口Flyable,让飞机、鸟、超人、导弹都实现该接口。接口表达的是has—a的关系* 而继承表达的是is—a的关系,飞机、鸟、超人、导弹不是一种事物,所以使用接口来实现*/
public interface Flyable {//接口中只有常量,没有变量,常量都是全局静态常量public static final int num = 5;//接口的方法自动采用public abstract修饰,所有方法都是全局抽象方法public abstract void fly();
}
public class Plane implements Flyable{@Overridepublic void fly() {System.out.println("飞机在飞......");}
}
public class Animal {
}
public class Bird extends Animal implements Flyable{@Overridepublic void fly() {System.out.println("鸟在飞.....");}
}
public class SuperMan implements Flyable{@Overridepublic void fly() {System.out.println("超人在飞......");}
}
public class Test {public static void main(String[] args) {Flyable plane = new Plane();showFly(plane);Bird bird = new Bird();showFly(bird);SuperMan sm = new SuperMan();showFly(sm);Flyable bird2 = new Plane();bird2.fly();}public static void showFly(Flyable fly){fly.fly();}
}
运行结果:
总结 一:接口的组成1、接口和数组、类、抽象类是同一层次的概念。2、成员变量:接口中所有的变量都使用public static final修饰,都是全局静态常量3、成员方法:接口中所有的方法都使用public abstract 修饰,都是全局抽象方法。4、构造方法:接口不能new,也没有构造方法5、接口做方法的形参,实参可以是该接口的所有实现类。总结 二:接口和多继承C++ 多继承优点:可以从多个父类继承更多的功能
缺点:不安全Java 单继承优点:安全
缺点:功能受限
解决方案:采用接口,既安全,功能又强大,接口变相的使java实现了c++的多继承,又没有c++多继承
的不安全性。