Javaの基礎の内部クラスのサンプルコードを詳しく解説

黄舟
リリース: 2017-03-31 10:31:38
オリジナル
1292 人が閲覧しました

この記事は主にJavaの基本的な内部クラスとサンプルに関する関連情報を紹介しますので、必要な方は参考にしてください

Javaの基本的な内部クラスの詳細な説明とサンプル

内部クラスは非常に理解しやすいものではありません。実際、率直に言って、あるクラスには別のクラスも含まれています

人間が脳、手足、器官、その他の物理的結果から構成されているのと同じように、内部クラスは心臓などの器官の 1 つに相当します。また、独自の 属性 行動 (血液、鼓動) もあります

明らかに、ここでは心臓を属性やメソッドで一方的に表すことはできませんが、クラスが必要です

そして、心臓は人間の体の中にあります。内部クラスが外部の内部にあるようなものです

例 1: 内部クラスの基本構造

//外部类
class Out {
  private int age = 12;
   
  //内部类
  class In {
    public void print() {
      System.out.println(age);
    }
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out.In in = new Out().new In();
    in.print();
    //或者采用下种方式访问
    /*
    Out out = new Out();
    Out.In in = out.new In();
    in.print();
    */
  }
}
ログイン後にコピー

実行結果: 12

上記の例から、内部クラスが実際に優れたコード構造に深刻なダメージを与えていることを理解するのは難しくありません。ですが、なぜ内部クラスを使用するのでしょうか?

内部クラスは、外部クラスのオブジェクトを生成せずに、外部クラスのメンバー変数(プライベートを含む)を自由に使用できるため、これが内部クラスの唯一の利点でもあります

心臓と同じように医師が採血に来ます

プログラムがコンパイルされると、Out.class と Out$In.class という 2 つの .class ファイルが生成されます

ここで $ は 1 つを表します上記のプログラムの in Out.In

Out.In in = new Out().new In() を使用して内部クラス オブジェクトを生成できます。このメソッドには注意が必要な小さな知識ポイントが 2 つあります。

1. 先頭のOutは、生成する必要がある内部クラスのオブジェクトがどの外部クラスにあるかを示すためのものです

2. 内部クラスのオブジェクトの前に外部クラスのオブジェクトが存在する必要があります。内部クラスの機能は外部クラスのメンバー変数にアクセスすることなので生成できます

例2: 内部クラスの変数アクセスフォーム

class Out {
  private int age = 12;
   
  class In {
    private int age = 13;
    public void print() {
      int age = 14;
      System.out.println("局部变量:" + age);
      System.out.println("内部类变量:" + this.age);
      System.out.println("外部类变量:" + Out.this.age);
    }
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out.In in = new Out().new In();
    in.print();
  }
}
ログイン後にコピー

実行結果:

ローカル変数: 14
Internalクラス変数: 13
外部クラス変数: 12

例 1 から、内部クラスに同じ名前のメンバー変数とローカル変数がない場合、内部クラスは外部クラスのメンバー変数に直接アクセスすることがわかります。 Out.this. 属性名を指定せずにクラスを作成します

そうしないと、内部クラスのローカル変数が外部クラスのメンバー変数を上書きします

そして、this.attribute を使用して内部クラス自体のメンバー変数にアクセスできます外部クラスのメンバー変数は Out.this を使用する必要があります。 例 3:

static

inner class

実行結果: 12

内部クラスを静的にすると、内部クラスは外部クラスの静的メンバー変数にのみアクセスできるようになり、制限があります

第二に、内部クラスは静的であるため、Out.In を全体として表示でき、オブジェクトのオブジェクトも内部クラスは直接 new にすることができます (クラス名 static を通じてアクセスされ、外部クラス オブジェクトが生成されるかどうかは関係ありません)

例 4: プライベート内部クラス

class Out {
  private int age = 12;
   
  private class In {
    public void print() {
      System.out.println(age);
    }
  }
  public void outPrint() {
    new In().print();
  }
}
 
public class Demo {
  public static void main(String[] args) {
    //此方法无效
    /*
    Out.In in = new Out().new In();
    in.print();
    */
    Out out = new Out();
    out.outPrint();
  }
}
ログイン後にコピー
実行結果: 12

内部クラスを外部クラスのメソッドによってのみ操作したい場合は、private を使用できます。 内部クラスの宣言

上記のコードでは、操作のために Out クラスで In クラスのオブジェクトを生成する必要があります。 Out.In in = new Out().new In() を使用して内部クラスのオブジェクトを生成することはできなくなりました

つまり、現時点での内部クラスは外部クラスによってのみ制御できます

同様に、私の心臓は私の体によってのみ制御でき、他の人はそれに直接アクセスすることはできません

例 5: メソッド内部クラス

class Out {
  private int age = 12;
 
  public void Print(final int x) {
    class In {
      public void inPrint() {
        System.out.println(x);
        System.out.println(age);
      }
    }
    new In().inPrint();
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out out = new Out();
    out.Print(3);
  }
}
ログイン後にコピー
実行結果:

3

12


上記のコードでは、次のように移動しました。内部クラスを外部クラスのメソッドに接続し、外部クラスのメソッドで内部クラス オブジェクトを生成して内部クラスのメソッドを呼び出します

これが外部クラスのメソッドにパラメータを渡す必要がある場合、外部クラスのメソッドパラメータは、final を使用して定義する必要があります。final には特別な意味はなく、単なる表現形式です。

以上がJavaの基礎の内部クラスのサンプルコードを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート