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 类与接口的区别
4 1.类与类之间是单继承的,直接父类只有一个
5 2.类与接口之间是多实现的,一个类可以实现多个接口
6 3.接口与接口之间是多继承的,某个接口想要其他接口的多种抽象方法
7
8 下面的借口,内含五种方法
9 1.methodA
10 2.methodB
11 3.method
12 **4.methodAbs 同时来源与借口A与B,只写一个
13 5.methodDefault() 必须重写
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 }
27
28
29 package cn.learn.Interface;
30 //多继承的接口的实现
31 //其中methodAbs是不冲突的,因为抽象方法没有方法体
32
33 public class ExtendsInterfaceImpl implements ExtendsInteface {
34 //重写默认方法,java12 不用带default关键字?
35 @Override
36 public void methodDefault() {
37
38 }
39
40 @Override
41 public void method() {
42
43 }
44
45 @Override
46 public void methodA() {
47
48 }
49
50 @Override
51 public void methodB() {
52
53 }
54 //重写冲突的抽象方法
55 @Override
56 public void methodAbs() {
57
58 }
59 }
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的方法只有接口自己能调用,不能被实现类或别人使用
*/