接口就是一种比抽象类还抽象的类,体现在所有方法都为抽象方法。
定义类的关键字是class,而定义接口的关键字是interface。
如:
金属接口 货币接口 黄金类
编程实现Runner接口,提供一个描述奔跑行为的抽象方法。
编程实现Hunter接口继承Runner接口,并提供一个描述捕猎行为的抽象方法。
编程实现Man类实现Hunter接口并重写抽象方法,在main方法中使用多态方式测试
public interface Runner { // 自定义抽象方法描述奔跑的行为 public abstract void run(); }
// 接口只能继承接口,不能继承类 public interface Hunter extends Runner { // 自定义成员方法描述捕猎的行为 public abstract void hunt(); // 将两个默认方法中重复的代码可以提取出来打包成一个方法在下面的两个方法中分别调用即可 private void show() { System.out.println("在以后的开发中尽量减少重复的代码,也就是减少代码的冗余!"); } // 增加一个抽象方法 //public abstract void show1(); // 增加非抽象方法 public default void show1() { show(); //System.out.println("在以后的开发中尽量减少重复的代码,也就是减少代码的冗余!"); System.out.println("show1方法中:这里仅仅是接口中的默认功能,实现类可以自由选择是否重写!"); } // 增加非抽象方法 public default void show2() { show(); //System.out.println("在以后的开发中尽量减少重复的代码,也就是减少代码的冗余!"); System.out.println("show2方法中:这里仅仅是接口中的默认功能,实现类可以自由选择是否重写!"); } // 增加静态方法 隶属于类层级,也就是接口层级 public static void test() { System.out.println("这里是静态方法,可以直接通过接口名.的方式调用,省略对象的创建"); } }
public class Man implements Hunter { @Override public void hunt() { System.out.println("正在追赶一直小白兔..."); } @Override public void run() { System.out.println("正在被一直大熊追赶,玩命奔跑中..."); } @Override public void show1() { System.out.println("为了给你几分薄面,我决定重写一下!"); } public static void main(String[] args) { // 1.声明接口类型的引用指向实现类的对象,形成了多态 Runner runner = new Man(); runner.run(); Hunter hunter = new Man(); hunter.hunt(); System.out.println("-----------------------------------------"); // 2.可以使用接口名称.的方式调用接口中的静态方法 Hunter.test(); } }
public interface Metal { // 自定义抽象方法描述发光的行为 public abstract void shine(); }
public interface Money { // 自定义抽象方法描述购物的行为 public abstract void buy(); }
// 使用implements关键字表达实现的关系,支持多实现 public class Gold implements Metal, Money { @Override public void shine() { System.out.println("发出了金黄色的光芒..."); } @Override public void buy() { System.out.println("买了好多好吃的..."); } public static void main(String[] args) { // 1.声明接口类型的引用指向实现类的对象,形成了多态 Metal mt = new Gold(); mt.shine(); Money mn = new Gold(); mn.buy(); }
public interface InterfaceTest { /*public static final */int CNT = 1; // 里面只能有常量 //private void show(){} // 从Java9开始允许接口中出现私有方法 /*public abstract */void show(); // 里面只能有抽象方法(新特性除外),注释中的关键字可以省略,但建议写上 }