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

黄舟
リリース: 2017-09-21 09:29:48
オリジナル
1873 人が閲覧しました

次のエディターは、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!