- 父类被重写的方法和子类重写的方法必须都是非static的。
- 对于访问修饰符,子类方法不能小于父类方法;若父类方法是private的,则子类不能重写该方法。
- 对于方法名和形参列表,子类方法必须与父类方法相同。
- 对于返回值类型,若父类方法是void或基本数据类型,则子类方法必须与父类方法相同;若父类方法是引用数据类型,则子类方法只能返回与父类方法相同的类型或其子类。
- 对于异常,若父类方法抛出异常,则子类方法只能抛出与父类方法相同的异常或其子类。
public class OverrideMethod {
public static void main(String[] args) {
System.out.println("-----父类对象-----");
Test1 test1 = new Test1();
test1.print1();
System.out.println(test1.print2(1));
System.out.println(test1.print3("test1"));
System.out.println("-----子类对象-----");
Test1 test2 = new Test2();
test2.print1();
System.out.println(test2.print2(2));
System.out.println(test2.print3("test2"));
}
}
class Test1 {
void print1() {
System.out.println("Test1.print1");
}
protected int print2(int value) {
System.out.println("Test1.print2");
return value;
}
public Object print3(String str) throws RuntimeException {
System.out.println("Test1.print3");
return str;
}
}
class Test2 extends Test1 {
@Override
protected void print1() {
System.out.println("Test2.print1");
}
@Override
public int print2(int value) {
System.out.println("Test2.print2");
return value;
}
@Override
public String print3(String str) throws IndexOutOfBoundsException {
System.out.println("Test2.print3");
return str;
}
}