私はちょうどこれについて興味があります。私はこれを正しく理解していないかもしれません。ただし、Java ではデータ メンバーの可視性を下げることはできますが、メンバー関数の可視性を下げることはできないようです。パブリック データ メンバーとパブリック関数を持つ Parent クラスがあります。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);
}
}