javaSE.方法的重写
因为默认比较大的是两个对象是否为同一个对象,所以这里肯定得到false,但有些情况,实际上我们希望名字,年龄,性别相同,那么这肯定是同一个人,但这里做不到.
我们需要修改一下equals方法的默认实现来完成,这里就要用到方法的重写.
方法的重写
方法的重写不同于之前的重载,方法的重载是为某个方法提供更多种类,而方法的重写是覆盖原有的方法实现.
在子类写一个实现,把父类的方法覆盖掉,优先使用最近的.
equals 的重写
toSring重写
这样生成上一行的那些注释
因为println会调用toString, toString方法重写了
原本是这样的
重写父类的父类 worker的父类Person,再父类Object
无论多少级都可以重写
重写test()
父类不是public 用不了
子类不一定要跟父类权限等级一样,子类可以比父类高权限,但是不能比父类权限低
调用对象实际类型的,就是new的什么
test 全改成public权限
静态方法不支持重写,因为它属于类本身,但是它可以被继承
基于这种方法可以重写的特性,对于一个类定义的行为,不同子类可以出现不同的行为,
比如考试,学生考试的可以得到A,而工人去考试只能得到D:
多态的体现:不同子类,对于同一个方法产生不同的结果
final
如果我们不希望,子类重写某个方法,我们可以在方法前添加final关键字,表示这个方法已经是最终形态.
final 加载String类前面
只能构造的时候才能赋值,有初始值构造也不能赋值了,只能赋值一次.
final 用字Person类前面
无法继承了,最终形态.
可以重载但是不能重写了
父类方法private权限也不能重写,只是重新创建新方法
没报错,但只是重新创建了新方法,并不是重写.
super 直接使用原本的方法
super不能再main那里用,要在类里边用,例如上面的worker
static 里面不能用super 静态的属于类的,也不能用this
父类private,子类无法重写