接口的使用
①接口使用interface来定义
②Java中,接口和类是并列的两个结构
③定义接口中的成员
JDK7及以前:只能定义全局常量和抽象方法
全局常量: public static final修饰的,书写时,可以省略不写
抽象方法: public abstract修饰的,书写时,可以省略不写
interface fly{ public static final int MAX_SPEED = 7900; int MIN_SPEED = 1; //省略不写 public abstract void fly(); void stop(); //省略不写 }
Java开发中,接口通过让类去实现( implements )的方式来使用
如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化
如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类
public class Test { public static void main(String[] args) { Bird bd = new Bird(); bd.fly(); bd.stop(); } } class Bird implements fly{ @Override public void fly() { System.out.println("鸟在飞"); } @Override public void stop() { System.out.println("鸟停下了"); } } interface fly { public static final int Max_SPEED = 7900; int MIN_SPEED = 1; //省略不写 public abstract void fly(); void stop(); //省略不写 }
接口之间可以继承,且可以多继承
接口的具体使用,体现多态性
接口,实际上可以看做是一种规范
JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法
public interface Compare { //静态方法,只能直接通过接口调 public static void method1(){ system.out.print("这是静态方法"); } //默认方法,通过实现类的对象调,可以在实现类中重写 public default void method2(){ system.out.print("这是默认方法"); } }
如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法。-- >类优先原则
实现类的方法中调用接口中的静态方法
接口名.super.静态方法名