复习
- 权限修饰符 public protected default private
- 封装:提供一对get/set()方法去访问
- Static:成员变量/成员方法/代码块
- Final:局部变量/成员变量/成员方法/类
接口:
- 是引用数据类型
- 接口中可以放什么
- 所有版本:
静态常量
默认添加 修饰符 public static final
Int.MAX_VALUE
抽象方法
- JDK1.8
静态方法
属于接口 通过接口名.方法名调用
默认方法
作用 功能的扩展 可以选择性在实现类中重写
- JDk1.9
私有方法 存放默认方法中的公共代码 实现代码的复用 可以调用接口里的其他方法
私有静态方法 给静态代码中公共代码的提取 可以调用静态方法
3.接口的使用步骤
A.不能new对象 需要一个实现类 实现接口
B.实现类必须实现接口的所有抽象方法
C.通过实现类调用方法
4.接口和类的关系:
类 和 类(单继承):1 v 1 extends 继承
接口 和 类:没有此关系
类 和 接口(可以继承父类 多实现接口 )1 v n implements
接口 和 接口(多继承):1 v n extends
子类中可以使用
- 独有的方法
- 父类中继承过来的所有方法
- 接口中的 默认方法(有重名的需要重写) 和 抽象方法
接口作为方法参数和返回值的
- 方法参数:传的是接口的实现类的对象,传的是哪个实现类,调用的就是具体的实现类的对象和方法。
- 返回值:return new 接口的实现类 具体返回的都是接口的实现类对象
多态:一种事物,多种形态,称为多态
出现前提:没有关系的类会编译报错
接口的多态:
Interface a = new InterfaceImpl(); à向上造(转)型
类的多态
Animals b = new BigFish(); à向上造(转)型 父类型引用指向子类型对象
接口类型 a = new 接口实现类对象()
父类型 a = new 子类型()
编译时状态(编译器) = 运行时状态(JVM)
编译看左边,运行看右边。意思编译时候,看左边有没有该方法,运行的时候结果看 new 的对象是谁,就调用的谁。只能调用左边的成员变量。
编译时状态决定了对象能调用那些属性和方法
运行时状态决定了对象最终能调用那些方法(重写)
BigFish c = (BigFish) b; 向下转型(强制类型转换)
- 有可能出现的问题:不知道 引用 到底是什么类型
ClassCastException – 类型转化异常
- 解决办法:转换前先判断 引用 实际上是不是要转换的类型对象
引用(a) instanceof 子类型(cat)
多态好处:类型统一 代码规范 代码的复用性(当有多种继承的类的对象是,主方法里的方法的返回值和形参可以统一用父类,更好的类型统一)
多态出现的前提
继承:必须存在父子类关系
向上造型:在多要中需要将子类型的引用赋值给父类型对象
重写:必须 子类重写父类中的方法