在类层次结构中,当子类中的方法与其超类中的方法具有相同返回类型和签名(方法名+形参为KEY的散列)时,就称为子类中的方法重写(override)了超类中的方法.当在子类中调用被重写的方法时,总是引用子类中的定义的方法,而超类中定义的方法将被隐藏.
public class test2 { // @param args public static void main(String args[]) { Y y = new Y(); y.show(); } } class X { void show() { System.out.println("this is X method"); } } class Y extends X { void show() { System.out.println("this is Y method"); } }
输出:
this is Y method
当调用y对象的show()时,将使用y中定时的show(),即y中的show()重写了x中的声明的show()
要访问超类中被重写的方法,就要使用super,例如:
class Y extends X { void show() { super.show(); System.out.println("this is Y method"); } }
输出:
this is X method this is Y method
方法重写只在两个方法签名一致时才发生,如果有不一致的地方,那么两个方法就只是重载而已:
public class test2 { // @param args public static void main(String args[]) { Y y = new Y(); y.show(1); } } class X { void show() { System.out.println("this is X method"); } } class Y extends X { void show() { super.show(); System.out.println("this is Y method"); } void show(int i) { System.out.println("this is Y int method"); } }
输出:
this is Y int method
y中的show()有一个整型形参,这使得他的类型签名与没有形参的A中的show()不同.因此,不会有重写(或名称隐藏)发生.