动手动脑:方法覆盖
注:方法覆盖要求子类与父类的方法一模一样,否则就是方法重载(overload)
测试:
1. 在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。
package test2;
class Grandparent {
public Grandparent() {
System.out.println("GrandParent Created.");
}
public void PrintDemo() {
System.out.println("学习");
}
}
class Parent extends Grandparent {
public Parent() {
System.out.println("Parent Created");
}
@Override
public void PrintDemo() {
// TODO Auto-generated method stub
super.PrintDemo();
System.out.println("Java");
}
}
public class TestInherits {
public static void main(String args[]) {
Parent p = new Parent();
p.PrintDemo();
}
}
结果:
GrandParent Created. Parent Created 学习 Java
2.
(1)覆盖方法的允许访问范围不能小于原方法。
如: 改为protected
@Override
protected void PrintDemo() {
// TODO Auto-generated method stub
super.PrintDemo();
System.out.println("Java");
}
报错:
Multiple markers at this line
- Cannot reduce the visibility of the inherited method from
Grandparent
- overrides test2.Grandparent.PrintDemo
(2)覆盖方法所抛出的异常不能比原方法更多。
(3)声明为final方法不允许覆盖。
public final void PrintDemo() {
System.out.println("学习");
}
报错:
Multiple markers at this line
- overrides test2.Grandparent.PrintDemo
- Cannot override the final method from
Grandparent
(4)不能覆盖静态方法
public static void PrintDemo() {
System.out.println("学习");
}
报错:
Multiple markers at this line
- This instance method cannot override the static method from Grandparent
- The method PrintDemo() of type Parent must override or implement a supertype
method
- overrides test2.Grandparent.PrintDemo

浙公网安备 33010602011771号