一、接口
1.接口的格式
pUblic interface 接口名 {
}
//子类与接口的关系 用关键字 implements
public class 子类 implements 接口{
}
2.接口中的成员
接口中只有5种成员, 分别为: 抽象方法, 默认方法(JDK8), 静态方法(JDK8), 私有方法(JDK9), 自定义常量
- 抽象方法
//public abstract: 可以省略,默认存在
public abstract 返回值类型 方法名(参数);
- 默认方法
// public 可以省略,默认存在
public default 返回值类型 方法名(参数){
方法体;
}
- 静态方法
// public : 可以省略, 默认存在
public static 返回值类型 方法名(参数列表) {
方法体;
}
- 私有方法
- 私有普通方法
private 返回值类型 方法名(参数){
方法体;
}
- 私有静态方法
private static 返回值类型 方法名(参数){
方法体;
}
- 自定义常量
// public static final : 可以省略, 默认存在
public static final 数据类型 常量名 = 值;
3.接口的使用
public class 子类 implements 接口1,接口2...{
}
使用特点
-
抽象方法(重要)
-
用来给子类重写, 子类必须重写接口中所有的抽象方法
-
-
默认方法
-
子类可以直接调用默认方法
-
子类可以重写默认方法
-
-
静态方法
-
不需要创建子类对象, 直接使用 接口名.xxx 去调用, 只能这样调用
-
-
私有方法
-
只能在本接口中使用, 本质上其实就是为当前接口中的默认方法和静态方法服务的
-
4.接口多实现的注意事项
- 两个接口中有同名的抽象方法,子类只需重写一个
- 两个接口中有同名的默认方法,子类必须重写这个默认方法
- 两个接口中有同名的静态方法,无影响,使用哪个接口就调用哪个方法
- 父类中的方法和接口中的默认方法同名,使用的是父类中的方法
5.接口的多继承
- 类与接口之间的关系
关系 | |
类与类的关系 | 继承关系,只能单继承不能多继承,但是支持多层继承(如子类继承父类,父类继承父类的父类) |
类与接口的关系 | 实现关系,可以多实现 |
接口与接口的关系 | 继承关系,可以多继承 |
- 接口与抽象类
抽象类 | 接口 | |
创建对象 | 不能创建对象 | 不能创建对象 |
构造方法 | 有构造方法,为了给子类初始化 | 没有构造方法 |
抽象方法 | 有,给子类重写 | 有,给子类重写 |
默认方法 | 没有默认方法 | 有默认方法 |
二、多态
概念:同种事物的不同形态
1.多态的前提
- 要有父类(extends / implements)关系
- 要有方法的重写(没有方法重写 多态无意义)
- 父类引用指向子类对象
//父类引用指向子类对象
Father f = new Son();
2.多态情况成员使用特点
(1)成员变量
- 编译看父类,运行也看父类
(2)成员方法
- 编译看父类,运行看子类
3.多态应用场景
如果方法的参数是父类,实际传入的就是该类的子类对象
- 方法中参数传递
4.多态的注意事项
多态的弊端
- 当写出了多态的格式后,父类的引用不能直接访问子类特有的属性和行为