方法重写 在子类中如果创建了一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为方法重写(override),又称为方法覆盖 。当父类中的方法无法满足子类需求或子类具有特有功能的时候,需要方法重写 。
重写方法时,需要遵循以下规则:
- 参数列表必须完全与被重写的方法参数列表相同 。
- 返回的类型必须与被重写的方法的返回类型相同 。
- 访问权限不能比父类中被重写方法的访问权限更低(public>protected>default>private)
- 父类的成员方法只能被它的子类重写 。
- 声明为 final 的方法不能被重写 。
- 声明为 static 的方法不能被重写,但是能够被再次声明 。
- 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法 。
- 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法 。
- 构造方法不能被重写 。
- 如果不能继承一个方法,则不能重写这个方法 。
class Father{public void move(){System.out.println("Father");}}class Son extends Father{public void move(){System.out.println("Son");}}public class Test1{public static void main(String args[]){Father a = new Father(); // Father 对象// 父类的引用指向了子类Father b = new Son(); // Son子类重写了Father父类的方法Son c = (Son)new Father();a.move();// 执行 Father 类的方法b.move();//执行 Son 类的方法c.move();}} 以上实例编译运行结果如下:Fathersonson 在上面的例子中可以看到,尽管 b 属于 Father 类型,但是它运行的是 Son类的 move方法 。这是由于在编译阶段,只是检查参数的引用类型 。
然而在运行时,Java 虚拟机(JVM)指定对象的类型并且运行该对象的方法 。
因此在上面的例子中,之所以能编译成功,是因为 Father 类中存在 move 方法,然而运行时,运行的是特定对象的方法 。
父类引用指向子类对象 父类引用指向子类对象指的是:
例如父类Animal,子类Cat,Dog 。其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类 。
Animal animal = new Cat();
即声明的是父类,实际指向的是子类的一个对象 。
可以用这几个关键词来概括:
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
