今天在和同事复习复用类的时候,突然想到这样一段代码,很变态的用法,输出结果让自己吃了一惊:
public class A {
private void say() {
System.out.print("in a\n");
}
public class B extends A {
private void say() {
System.out.print("in b\n");
}
public void print() {
say();
}
}
public void getSay() {
new B().say();
new B().print();
((A)(new B())).say();
}
public static void main(String args[]) {
A a = new A();
a.getSay();
}
}
输出结果:
in b
in b
in a
从结果上看,在 类B之外访问了 类B 的私有方法,这好像和Java的规则(在类之外,包括子类,不能访问类的私有成员)不一样。不能理解,呵呵,大家来解个惑吧!