我只是对此感到好奇。我可能没有做对。但是,在我看来,Java 允许降低数据成员的可见性,但不允许成员函数的可见性。我有一个带有公共数据成员和公共函数的父类。如果我去降低 Child 类中成员函数的可见性,则不允许这样做。但是,当我降低数据成员的可见性时,它不会抱怨。
- 我是否正确理解这一点?如果不是,我错在哪里?
- 如果是这样,为什么允许降低数据成员的可见性?
这是我写的一些代码
class Parent {
public int dataMember = 20;
public void function () {
System.out.println ("Called parent");
}
}
public class Child extends Parent {
private int dataMember = 10; // Reduces visibility OK
@Override
//protected void function () { // Reduces visibility NOT OK
public void function () {
System.out.println ("Child class call" );
System.out.println("Child dataMember = " + dataMember
+ " Parent dataMember" + super.dataMember);
}
public static void main(String[] args) {
Child c = new Child ();
c.function();
Parent p = new Parent ();
System.out.println ("Parent data member = " + p.dataMember);
}
}
不能再通过派生类访问数据成员。有没有办法通过子类引用访问父类的“dataMember”。
public class Another {
public static void main(String[] args) {
Child c = new Child ();
// Cannot access dataMember as expected
//System.out.println("Child dataMember = " + c.dataMember);
// Can access dataMember through parent object as expected
Parent p = new Parent ();
System.out.println("Parent dataMember = " + p.dataMember);
}
}