继承
定义:继承 extends
特点:
- 无论是否调用父类构造方法 创建子类对象时 都一定会创建父类对象 (默认调用父类的无参构造)(注意是否存在父类无参构造)
- 只能在子类构造方法中 通过super(参数列表)** 去匹配调用父类构造方法 必须是第一句话 因此不能同时调用本类其他构造方法的重载
- 在子类中可以通过super关键字 表示将来父类的对象 可以通过super。找出所有非私有属性和方法 但是在父类中不能调用子类资源
- 子类中的super可以替换为this 意味着先查找子类 在查找父类 一直到Object都没找到则报错 但是this不能随意替换成super 会省略本类查找直接去父类查找
- Java是单继承语言 一个类可以有多个子类 但是只能有一个父类
- 子类对象调用方法是 先判断是否存在该对象方法 存在则执行 不存在继续向上查找 找到则执行 一直到Object都没找到则报错
重写
存在于继承关系中 子类重新编写父类方法的方法体 称为方法的重写
1.子父类中2.方法名相同3.参数列表相同
返回值:要求子类重写方法返回值类型 等于父类该方法的返回值类型 或者是父类该方法返回值类型的子类类型
可以在方法上添加@Override 验证是否是方法的重写
重载
1.同一个类中 2.方法名相同3.参数列表不同
abstract 抽象的
修饰类:所修饰的类 变为抽象类 可以存放抽象方法 此类不能再被new成对象 一般一定需要有子类(实现类)
修饰方法:该方法变为抽象方法 没有方法体 侧重于设计 约束所有的子类必须重写该方法 只能存放在抽象类中
final 最终的
修饰类:变为不能有子类的类
修饰属性:变为常量 值不可在修改
基本数据类型 引用数据类型 都不可再改变值
访问修饰符
public 项目中都能访问
protected 同一个包下的两个类 可以互相访问
不同包中的两个类 不能访问 不同包中的子父类 子类可以通过super. 访问父类资源
什么都不写 不能跨包
private 不能跨类
多态
定义:父类的引用 指向子类的对象 表现出子类形态的能力
条件:1.父类的引用指向子类对象 2.子类重写父类方法
使用父类的引用 调用子类方法的逻辑:
1.先判断父类中是否有该方法 如果没有 直接报错
2.如果父类存在该方法 并不会直接执行 而是判断父类引用所指向的对象类型中是否重写了这个方法
3.如果重写了 则执行重写后的方法 如果没有重写 则执行父类的原始方法
经验:
如果父类的引用去调用父类已有的方法 无需判断引用指向的子类对象类型 直接调用即可
如果父类的引用调用子类特有资源 无法直接调用 必须将对象转为子类引用 调用子类特有资源
instanceof 关键字 用于判断父类引用指向的是哪个子类类型
多态用于方法参数
多态用于方法的返回值
封装
定义:打包
抽象出一个类 编写一个方法 创建一个数组
标准实体类需要对于属性进行封装操作 提升属性的安全性 可控性
1.属性私有化 属性既不能看也不能改
2.给私有化后的属性 提供get【用于查看属性】和set【用于修改】方法
标准java实体类 javabean
规范:
1.属性私有化
2.提供无参构造
3.提供带参构造
4.封装属性(get set方法) 方法中 不建议编写逻辑代码
5.toString()