命名规则
接口是一种公共的规范标准,是一种引用数据类型。
定义规则
public interface 接口名称 { }
接口内容可以包括:常量、抽象方法、默认方法、静态方法、私有方法等
接口中的抽象方法,修饰符必须是public abstract,也可选择性的忽略
接口没有静态代码块和构造方法
使用规则
接口不能直接使用,必须有一个实现类来实现该接口。
实现类必须覆盖重写接口的所有的抽象方法,如果没有全部实现,那么这个实现类必须是抽象类
public class 实现类名称 implements 父类
1 | public interface MyinterfaceAbs { |
默认方法
当接口中新添加一个抽象方法时,会影响其他实现类。接口当中的默认方法可以解决接口升级的问题,默认方法会被实现类继承,也可被覆盖重写
public default 返回值类型 方法名称(参数名称){ 方法体 }
1 | public default void methoddefault(){ |
静态方法
- 不能通过接口实现类的对象来调用接口当中的静态方法,而是通过接口名称直接调用:接口名称.静态方法
- public static 返回值类型 方法名称(参数名称){ 方法体 }
私有方法
当需要抽取一个公有方法,用来解决两个默认方法之间的重复代码的问题。但是这个代码不应该让实现类使用,应该是私有化的
普通私有方法:解决多个默认方法之间重复代码问题
private 返回值类型 方法名称(参数名称){ 方法体 }
静态私有方法:解决多个静态方法之间重复代码问题
private static 返回值类型 方法名称(参数名称){ 方法体 }
常量
- 接口当中也可以定义“成员变量”,必须使用public static final来修饰,其实就是接口中的常量,一旦赋值不可修改。
- 常量名称大写
继承父类实现多个接口
一个类的直接父类是唯一的,但是一个类可以同时实现过个接口
public interface 接口名称1,接口名称2…. { }
若多个接口中同时定义了相同的抽象方法,那么实现类中覆盖重写一次即可
若多个接口中同时定义了相同的默认方法,那么实现类中必须覆盖重写一次
一个类,如果直接父类当中的方法和所实现接口当中的默认方法产生了冲突,优先使用父类当中的方法
接口和接口之间多继承
- 多个父接口的抽象方法重复不影响
- 多个接口的默认方法重复,那么子接口必须进行默认方法的覆盖重写,必须带default
1 | public interface MyinterfaceA { |
接口 对象 = new 实现类 和 实现类 对象 = new 实现类的区别
前提:接口A 类B是接口A的实现类
A a = new B();
B b = new B();
区别
a对象只能调用接口A中的方法,不能调用B中特有的方法;B可以调用接口和实现类中的特有方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25public interface SaleComputer {
public void show();
}
public class Lenovo implements SaleComputer{
public void show() {
System.out.println("展示电脑....");
}
public void myshow(){
System.out.println("展示实现类的特有方法");
}
}
public class ProxyTest {
public static void main(String[] args) {
//接口 = new 接口实现类
SaleComputer temp = new Lenovo();
temp.show();
//实现类 对象 = new 实现类
Lenovo lenovo = new Lenovo();
lenovo.show();
//调用实现类特有方法
lenovo.myshow();
}
}