缺陷:“重载”私有方法

我们试图这样做也是无可厚非的:

//: 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 方法,我们最好用一个不同的名字。


你可能感兴趣的:(缺陷:“重载”私有方法)