前言
博客仅记录个人学习进度和一些查缺补漏。
学习内容:BV17F411T7Ao
一、静态变量
对teacherName这个成员变量添加public static属性。使其可以直接被外部访问,并且以后所有的bean新生成时都会使用同一个teacherName。
静态变量回存储在堆内存,并且由同一个类的各个对象共享。
二、静态方法
数组方法相关的工具类
this是由虚拟机自动复制的,指向当前类的地址值。
非静态的方法一般都是要使用对象本身的属性的方法,而静态方法设计上来说是为了实现某些功能。
对象都没有创建,对应的那个实例变量当然没有创建,不可能调用实例变量。
静态的方法和变量是优先于对象存在而存在的。
三、继承
就是把要用的参数放到一个bean里,就不用一一传参,直接传一个整体。
但是当bean过多,有相同之处的bean就会使代码冗余重复,如学生老师的共同之处就是都是人。
找到共用属性。
此时C是A的间接父类。
如果没有显式的父类,虚拟机会自动为新类继承object类。
子类只能访问和使用父类中非私有的成员。
函数名直接决定不能继承构造方法
注意堆内存中,会分两块分别记录子变量和父变量
private对象可以被继承,但是不能直接访问,只能通过get和set来访问
虚方法就是非私有方法,可以直接被继承在虚方法表中使用。
同名变量在未标识时,有就近原则,先局部,再本类,最后父类。但最多只能向上一个父类。
四、方法重写
当父类中的方法无法满足子类需求的时候,就需要重写方法并使用@override注释
本质就是单纯在虚方法表中标注了此方法的原属类
子类的返回值小于父类,小于的意思是返回值的类只能和父类继承来的那个方法的返回值的类或者其子类。
静态方法不会添加进虚方法表,不能被重写。
五、构造方法
没有构造父类就无法初始化子类。
super就是代表了父类。
this和super
只有构造能这样写
六、多态
根据传递进来的对象不同,show会引导至对应对象重写的show。
person类可以使用student类来构造,父类可以使用子类构造。
父类可以兼容子类,但是子类不能兼容父类,因为子类中有自己独自的成员变量,父类的构造无法初始化这些对象。
此处将animal类使用子类dog初始化,由于dog在构造时会先调用super.()构造animal,所以可以指通过。
运行的时候优先看子类方法。因为构造函数实际使用的时子类,此时虚方法表是子类的虚方法表,如果重写过同名方法,子类会在虚方法表中覆盖父类同名方法。成员变量因为不在虚方法表中所以不受影响。
使用name这个成员变量时,先看父类有没有,再看子类。
但是父类无法使用子类的专有成员方法的,因为要防止专有方法使用了父类所没有成员变量。
多态的应用,兼容性。
总结
类的继承和方法的重载都是很重要的基础知识,以前只是了解学过皮毛,现在在系统地学习过408以后再重学一次,从内存的角度来看清晰了不少。