私有方法重载, thinking in java

//: c07:PrivateOverride.java

// Abstract classes and methods.

import com.bruceeckel.simpletest.*;

public class PrivateOverride {

private static Test monitor = new Test();

private void f() {

System.out.println("private f()");

}

public static void main(String[] args) {

PrivateOverride po = new Derived();

po.f();

monitor.expect(new String[] {

"private f()"

});

}

}

class Derived extends PrivateOverride {

public void f() {

System.out.println("public f()");

}

} ///:~

我们所期望的输出是“public f( )”,但是由于private方法被自动认为就是final方法,而且对导出类是屏蔽的。因此,在这种情况下,Derived类中的f( ) 方法就是一个全新的方法;既然基类中f( ) 方法在子类Derived中不可见,因此也就没有被重载。

结论就是:只有非private方法才可以被重载;但是我们还需要密切注意重载private方法的现象,虽然编译不会出错,但是不会按照我们所期望的来执行。明白地说,在导出类中,对于基类中的private方法,我们最好用一个不同的名字。

你可能感兴趣的:(私有方法重载, thinking in java)