ホームページ  >  記事  >  Java  >  Java のメンバー変数に関する隠された詳細

Java のメンバー変数に関する隠された詳細

黄舟
黄舟オリジナル
2017-09-21 09:29:481889ブラウズ

次のエディターは、Java メンバー変数の非表示に関する記事 (例付きの説明) を提供します。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターをフォローして見てみましょう

1. サブクラスと親クラスに同じ名前のメンバー変数がある場合、サブクラスのメンバー変数は親クラスのメンバー変数を上書きしますか?次の例を見てみましょう:


public class A {
  public int x=10;
}
public class B extends A {
  public int x=20;
}
public class C {
  public static void main(String[] args) {
    A a=new B();
    System.out.println(a.x);  //1
    B b=new B();
    System.out.println(b.x);  //2
    System.out.println(((A)b).x);  //3
  }
}

クラス C の main メソッドを実行した結果は次のとおりです:

10
20
10

結果から、サブクラスが親クラスのメンバー変数、Eclipse デバッグ ツールでも、次の 2 つのメンバー変数があることが明確にわかります。3 番目の結果から、オブジェクトのメンバーへの直接アクセスは静的にバインドされていると結論付けることができます。公式の説明は次のとおりです。

クラス内で、サブクラスのメンバー変数が親クラスのメンバー変数と同じ名前である場合、型が異なっていても、名前が同じであれば問題ありません。親クラスのメンバー変数は非表示になります。

サブクラスでは、親クラスのメンバー変数に参照だけでアクセスすることはできません。代わりに、親クラスの非表示のメンバー変数を親クラスの参照から取得する必要があります。一般に、メンバー変数を非表示にすることはお勧めしません。コードが読みにくくなるからです。

静的メソッドの場合、次のようにメンバー変数は似ています:

public class A {
  public static void print() {
    System.out.println("A Static ");  
  }
}
public class B extends A {
  public static void print() {
    System.out.println("B Static ");  
  }
}
public class C {
  public static void main(String[] args) {
    A a=new B();
    a.print();
    
    B b=new B();
    b.print();
    ((A)b).print();
  }
}

結果は次のとおりです:

A Static 
B Static 
A Static

以上がJava のメンバー変数に関する隠された詳細の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。