重写都是方法的重写,与属性无关。
如下:图
调用父类方法输出的是父类的结果,子类方法输出子类结果,方法并没有重写。
这是因为,在静态方法中,定义的方法只和左边,也就是定义的数据类型有关。
重写必须还要是非静态的方法。
我们把方法改成非静态:使用alt+insert
选择要重写的方法
重写成功了
总结
重写:需要有继承关系,子类重写父类的方法!
1.方法名必须相同
2.参数列表列表必须相同
3.修饰符:范围可以扩大但不能缩小:pub1ic>Protected>Default>private
4.抛出的异常:范围,可以被缩小,但不能扩大;ClassNotFoundException --> Exception(大)
(标红是后面的知识)
重写,子类的方法和父类必要一致; 方法体不同!
为什么要重写?
父类的功能,子类不一定需要,或者不一定满足!|
多态
多态知识点。
了解多态,先了解引用类型,和实际类型。
实际类型是确定的,应用类型是不确定的。
现在我们在子类中写一个 eat();方法,父类没有eat()方法。
可以看到 父类没法调用子类独有的方法。如果强制调用,要转换类型。
小结:
子类,能调用的方法都是自己的或继承过来的
父类,可以指向子类,但无法调用子类独有的方法
对象能执行哪些方法,主要看的是左边,和右边关系不大
多态的注意点:
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系类型转换异常! ClassCastException !
- 存在条件: 继承关系,方法需要重写,父类引用指向子类对象! Father f1= new Son