java 내부 클래스(익명 클래스, 익명 대상, 정적 내부 클래스) 상세 및 실례

3189 단어 java내부 클래스
내부 클래스 소개
다른 클래스에 정의된 클래스를 내부 클래스라고 합니다.
구성원 내부 클래스
일..new 구성원 내부 클래스를 만들려면 외부 클래스의 실례를 먼저 만들고 통과해야 합니다.new 내부 클래스 만들기 대상
이..this는 외부 클래스의 클래스를 통해 사용할 수 있습니다.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. 정적 내부 클래스는 외부 클래스의 정적 방법과 변수에만 접근할 수 있고 비정적에 접근할 수 없다.
2. 정적 내부 클래스는 외부 클래스의 인용을 만들지 않고 직접 만들 수 있다.
익명 내부 클래스 접근 국부 변수
내부 클래스 접근 국부 변수는final이어야 합니다. 추가하지 않으면 jdk1.8이 기본적으로 추가됩니다.
사용하는 변수는 변할 때 아래의 방법을 사용할 수도 있고, 아래의 i를 시작할 때 정적으로 정할 수도 있다

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");
  }
}

읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기