Java学习_9_面向对象进阶(一)


前言

博客仅记录个人学习进度和一些查缺补漏。
学习内容: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以后再重学一次,从内存的角度来看清晰了不少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值