ホームページ  >  記事  >  Java  >  Java内部クラス(匿名クラス、匿名オブジェクト、静的内部クラス)の詳しい説明と例

Java内部クラス(匿名クラス、匿名オブジェクト、静的内部クラス)の詳しい説明と例

高洛峰
高洛峰オリジナル
2017-01-11 15:38:451394ブラウズ

内部クラスの概要

別のクラスで定義されたクラスは内部クラスと呼ばれます

メンバー内部クラス

1..new メンバー内部クラスを作成するには、まず外部クラスのインスタンスを作成し、次に.new Object

2..this を介して内部クラスにアクセスできます。外部 class.this のクラス名を介して、外部クラスのすべてのプロパティとメソッドにアクセスできます。

public class Test1 {
 
  String name = "asnd";
 
  public static void main(String[] args) {
 
    Test1 test1 = new Test1();
    Inner mInner = test1.new Inner();
    mInner.print();
  }
 
  void show() {
    System.out.println("show");
  }
 
  public class Inner {
 
    String name = "123";
    private void print(){
      show();
      System.out.println(name);//打印的是123
      System.out.println(Test1.this.name);//打印的是asnd
    }
  }
}

匿名内部クラス

クラスが作成されると、オブジェクトも作成されます。

一度だけ使用する必要があるクラスには匿名内部クラスを使用できます

File file = new File("D:/cc.txt") {
 
    @Override
    public boolean delete() {
      System.out.println("是否删除y/n");
      Scanner input = new Scanner(System.in);
      String str = input.next();
      if (str.equals("y")) {
        return super.delete();
      }
      System.out.println("删除失败");
      return false;
    }
  };
  file.delete();
 
}

匿名オブジェクト

オブジェクトは一度だけアクセスする必要があります。

new Thread() {
 
      @Override
      public void run() {
        System.out.println("线程开始!");
        try {
          Thread.sleep(2000);
          System.out.println("线程结束!");
        } catch (Exception e) {
          e.printStackTrace();
        }
        super.run();
      }
 
    }.start();

静的内部クラス

1. 静的内部クラスは 1 回のみアクセスできます。静的外部クラス メソッドと変数には非静的にアクセスできません。

2. 静的内部クラスは、外部クラスへの参照を作成せずに直接作成できます。

匿名の内部クラスはローカル変数にアクセスします

ローカル変数にアクセスする場合、内部クラスはfinalである必要があります。そうでない場合、jdk1.8はデフォルトでそれを追加します
使用される変数が変更される場合は、次のメソッドを使用するか、追加することができます。以下の i は最初に static に設定されています

for (int i = 0; i < 5; i++) {
      final int finali = i;
      new Thread() {
        public void run() {
          System.out.println(finali);
        };
      }.start();
 
    }

以下は内部クラスの実装テクニックを紹介します

public static void main(String[] args) {
    Lam mLam = new Lam();
    //第一种实现的方法
    mLam.to(new Ligh() {
      @Override
      public void shin() {
        System.out.println("on的第一种方法");
      }
    });
    //第二种实现方法
    class MyLam implements Ligh{
 
      @Override
      public void shin() {
        System.out.println("第二种");
 
      }}
 
    mLam.to(new MyLam());
  }
}
 
interface Ligh {
  void shin();
}
 
class Lam {
  public void to(Ligh ligh) {
    ligh.shin();
    System.out.println("on");
  }
}

読んでいただきありがとうございます、皆さんのお役に立てれば幸いです、このサイトのサポートに感謝します!

Java 内部クラス (匿名クラス、匿名オブジェクト、静的内部クラス) の詳細な説明と例、および関連記事については、PHP 中国語 Web サイトに注目してください。

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