package cn.learn.Interface; public interface MyInterfaceA { public abstract void methodA(); public abstract void methodAbs(); public default void methodDefault(){ System.out.println("aaa"); } }
package cn.learn.Interface; public interface MyInterfaceB { public abstract void methodB(); public abstract void methodAbs(); public default void methodDefault(){ System.out.println("bbb"); } }
1 package cn.learn.Interface; 2 //多继承的接口的实现 3 //其中methodAbs是不冲突的,因为抽象方法没有方法体 4 5 public class ExtendsInterfaceImpl implements ExtendsInteface { 6 //重写默认方法,java12 不用带default关键字 7 @Override 8 public void methodDefault() { 9 10 } 11 12 @Override 13 public void method() { 14 15 } 16 17 @Override 18 public void methodA() { 19 20 } 21 22 @Override 23 public void methodB() { 24 25 } 26 //重写冲突的抽象方法 27 @Override 28 public void methodAbs() { 29 30 } 31 }
1 package cn.learn.Interface; 2 /* 3 类与接口的区别 4 1.类与类之间是单继承的,直接父类只有一个 5 2.类与接口之间是多实现的,一个类可以实现多个接口 6 3.接口与接口之间是多继承的,某个接口想要其他接口的多种抽象方法 7 8 下面的借口,内含四种方法 9 1.methodA 10 2.methodB 11 3.method 12 **4.methodAbs 同时来源与借口A与B 13 14 * 15 注:多继承接口的类中,多父继承的接口方法冲突没关系,但是default方法重复会有问题,必须重写 16 17 */ 18 19 public interface ExtendsInteface extends MyInterfaceB,MyInterfaceA { 20 public abstract void method(); 21 22 @Override 23 default void methodDefault() { 24 25 } 26 }
1 package cn.learn.Interface; 2 /* 3 接口注意事项: 4 1.接口没有静态代码块static{}和构造方法 5 6 2.虽然一个类的直接父类是唯一的,但是一个类可以同时实现多个接口 7 格式: 8 public class MyInterfaceImpl implements 接口A名称,接口B名称{ 9 //覆盖所有抽象方法 10 } 11 12 3.如果实现类中实现的多个接口中,存在重复的抽象方法,那么只需要覆盖重写 13 一次即可(如果是多个接口有default方法,必须在此类进行覆盖重写) 14 15 4.如果实现类没有实现所有接口的所有抽象方法 16 实现类必须是抽象类 17 18 6.一个子类如果继承直接父类当中的方法,和接口中的默认方法产生冲突,优先用父类方法 19 格式: 20 public class 子类名称 extends 父类 implements 接口{ 21 方法体 22 } 23 注:这种情况下不必重写接口的default方法,因为优先级低于父类 24 25 26 */ 27 //java中所有的类都直接或者间接的是Object的子类,如下 28 public class MyinterfaceImpl extends Object implements MyInterfaceA,MyInterfaceB{ 29 //重写两个接口相同的抽象方法 30 @Override 31 public void methodAbs() { 32 System.out.println("重写两个接口相同的抽象方法"); 33 } 34 35 @Override 36 public void methodDefault() { 37 38 } 39 40 //覆盖重写了接口A与接口B所有的抽象方法 41 @Override 42 public void methodA() { 43 System.out.println("覆盖重写了A方法"); 44 } 45 46 @Override 47 public void methodB() { 48 System.out.println("重写了B方法"); 49 } 50 }
/* 接口内容总结 1.成员变量其实是有 public static final修饰,即为全局常量 且常量必须赋值,并不可改变 格式要完全大写,用下划线分割单词, 2.接口中最重要的是抽象方法,格式: public abstract 返回值类型 方法名(参数列表); 注意:实现类必须重写所有所有接口方法,除非是抽象类 3.从java 8开始,接口允许定义默认方法,格式: public defalut 返回值类型 方法名称(参数列表){ 方法体 } 注意:默认方法也可以覆盖重写 4.从java 8开始,接口允许定义静态方法,格式: public static 返回值类型 方法名称(参数列表){ 方法体 } 注意:static应该通过接口名称进行调用,不能通过实现类调用static修饰的方法 5.从java 9开始,接口允许定义私有方法,格式 普通私有方法: public private 返回值类型 方法名称(参数列表){ 方法体 } 静态私有方法: public private static 返回值类型 方法名称(参数列表){ 方法体 } 注意:private的方法只有接口自己能调用,不能被实现类或别人使用 */