ホームページ  >  記事  >  Java  >  Javaの基礎の内部クラスインスタンスを詳しく解説

Javaの基礎の内部クラスインスタンスを詳しく解説

Y2J
Y2Jオリジナル
2017-04-27 09:30:421306ブラウズ

この記事は主に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 ファイルが生成されます

ここで、$ は上記のプログラムの 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

内部クラス変数: 13外部クラス変数: 12

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

内部クラス自体のメンバー変数にアクセスするには、 this 属性名を使用して外部クラスのメンバーにアクセスする必要があります。 Out.this. 属性名

例 3: 静的内部クラス

class Out {
  private static int age = 12;
   
  static class In {
    public void print() {
      System.out.println(age);
    }
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out.In in = new Out.In();
    in.print();
  }
}

実行結果: 12

ご覧のとおり、static を使用して内部クラスを静的にする場合、内部クラスは外部クラスの静的メンバー変数には制限があります第二に、内部クラスは静的であるため、Out.In を全体として表示でき、内部クラスのオブジェクトを直接新規作成できます (クラス名を介して 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 を使用して内部クラスを宣言できます上記のコードでは、操作のために In クラスのオブジェクトを Out クラスで生成する必要があり、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を使用して定義する必要があります。最後に、これには特別な意味はなく、単なる表現形式です。

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

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