由于本身理解还不是很到位,所以写的很绕,后续待补充优化
1、封装(底层):该露的露,该藏的藏
- 高内聚:类的内部数据操作细节自己完成,不允许外部干涉
- 低耦合:仅暴露少量的方法给外部使用
- 属性私有private,get/set
- IDEA快捷键:alt+insert 快速插入getter、setter,同构造器
- 一个不明白的点(不清楚是否重要,也不清楚答案是什么,后续待补充:private、public和static的区别--看下面的图
- 私有的东西无法被继承
2、继承(宏观):扩展extends,是类和类之间的一种关系,还有依赖、组合、聚合
- 在Java中所有类,都默认直接或间接继承Object类(后续待补充)
- IDEA快捷键:光标在类中,点击ctrl+H ,查看继承关系
- Java只有单继承,没有多继承:一个儿子只能有一个爸爸,一个爸爸可以有多个儿子
- 私有的东西无法被继承
- super与this关键字 看着懵的话,之后应用了回头再看再补充,无需一直纠结(后续待补充)
- IDEA的使用tip:可以新建file写笔记的
3、方法重写
为什么需要重写?因为父类的功能,子类不一定需要,或者不一定满足
IDEA快捷键:alt + insert
关于重写:前提是需要有继承关系,子类重写父类的方法
1、方法名、参数列表必须相同
2、修饰符,范围可以扩大但不能缩小:public>protected>default>private
3、抛出的异常:范围可以缩小但不能扩大:如ClassNotFoundException(小) -->Exception(大)
重写是方法的重写,与属性无瓜
重写只与 非静态方法有关,与静态方法无瓜(比较下面两张图)
结论:(可以看蓝色o小圆点)
如果是静态方法:方法的调用仅与方法的左边有关,也就是定义的类型
如果是非静态方法:重写
换种好理解的说法:
有static时,fangfang调用Person类的方法,因为fangfang是用Person类定义的
没有static时,fangfang调用的是对象的方法,fangfang是用Student类new出来的(父类的引用指向了子类)
4、多态
- 自己理解:不管什么类型,左边决定有什么方法,右边决定用哪个构造器来初始化
- 多态的概念,可以理解为:方法的调用除了本类对象可以调用自己以外,在方法重写里还可以通过父类对象的引用来调用自己
- 注意事项:
- 是方法的多态,属性没有多态
- 父类和子类有联系 类型转换异常 ClassCastException
- 存在条件:继承关系,方法需要重写,父类引用指向子类对象
- 实现动态编译:类型:可扩展性
- 弹幕中说:编译看左边,运行看右边
- 对象能执行能执行哪些方法,主要看对象左边的类型,和右边关系不大
- 一个对象 实际类型是确定的,可以指向的引用类型就不确定了
- Student 能调用的方法都是自己的或者继承父类的
- Person类 父类型,可以指向子类,但是不能调用子类独有的方法
5、多态—instanceof 、引用类型的转换
instanceof:判断一个对象时什么类型是否存在父子关系
引用类型的转换:跟基础类型一样
高---低,需要强制类型转换
子类转换为父类,向上转型,可能丢失自己本来的一些方法,直接转换
抽象:封装、继承、多态