자바 익명 내부 클래스 원리 및 용법 상세 설명

본 논문 의 사례 는 자바 익명 의 내부 유형 원리 와 용법 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
눈여겨보다
익명 내부 클래스 는 한 번 만 사용 할 수 있 는 클래스 를 만 드 는 데 적합 합 니 다.익명 내부 클래스 를 정의 하 는 문법 형식 은 다음 과 같 습 니 다.

new      (    ) |     ()
{
   //          
}

위의 정 의 를 통 해 알 수 있 듯 이 익명 내부 류 는 하나의 부 류 를 계승 하거나 하나의 인 터 페 이 스 를 실현 해 야 하지만 최대 한 개의 부 류 를 계승 하거나 하나의 인 터 페 이 스 를 실현 할 수 밖 에 없다.
두 가지 규칙.
  • 익명 내부 류 는 추상 류 가 될 수 없다.
  • 익명 내부 클래스 는 구조 기 를 정의 할 수 없습니다.익명 내부 클래스 에 클래스 이름 이 없 기 때문에 구조 기 를 정의 할 수 없 지만 익명 내부 클래스 는 블록 을 초기 화 할 수 있 고 블록 을 초기 화 함으로써 구조 기 가 해 야 할 작업 을 완성 할 수 있 습 니 다.
  • 실전
    시선
    가장 많이 사용 되 는 익명 내부 클래스 를 만 드 는 방식 은 인터페이스 형식의 대상 을 만 드 는 것 입 니 다.
    2 코드
    
    interface Product
    {
      public double getPrice();
      public String getName();
    }
    public class AnonymousTest
    {
      public void test(Product p)
      {
       System.out.println("     " + p.getName()
         + ",   " + p.getPrice());
      }
      public static void main(String[] args)
      {
       AnonymousTest ta = new AnonymousTest();
       //   test()   ,      Product  ,
       //              
       ta.test(new Product()
       {
         public double getPrice()
         {
          return 567.8;
         }
         public String getName()
         {
          return "AGP  ";
         }
       });
      }
    }
    
    
    3 운행
    AGP 그래 픽 카드 를 하나 구 매 했 는데 567.8 을 썼어 요.
    설명
    익명 내부 클래스 를 정의 할 때 클 라 스 키 워드 를 사용 하지 않 고 익명 내부 클래스 를 정의 할 때 이 익명 내부 클래스 의 대상 을 직접 생 성 합 니 다.
    익명 내부 류 는 추상 류 가 될 수 없 기 때문에 익명 내부 류 는 추상 적 인 부류 나 인터페이스 에 포 함 된 모든 추상 적 인 방법 을 실현 해 야 한다.
    3 실전
    시선
    인 터 페 이 스 를 통 해 익명 내부 클래스 를 만 들 때 익명 내부 클래스 는 생 성 구조 기 를 표시 할 수 없 기 때문에 익명 내부 클래스 에는 암시 적 인 무 참 구조 기 만 있 기 때문에 new 인터페이스 이름 뒤의 괄호 에 매개 변수 값 이 들 어 갈 수 없습니다.
    부모 클래스 를 계승 하여 익명 내부 클래스 를 만 들 때 익명 내부 클래스 는 부모 클래스 와 비슷 한 구조 기 를 가지 게 됩 니 다.여기 서 비슷 한 것 은 같은 형 삼 목록 을 가 진 것 을 말 합 니 다.
    2 코드
    
    abstract class Device
    {
      private String name;
      public abstract double getPrice();
      public Device(){}
      public Device(String name)
      {
       this.name = name;
      }
      //      name setter getter  
      public void setName(String name)
      {
       this.name = name;
      }
      public String getName()
      {
       return this.name;
      }
    }
    public class AnonymousInner
    {
      public void test(Device d)
      {
       System.out.println("     " + d.getName()
         + ",   " + d.getPrice());
      }
      public static void main(String[] args)
      {
       AnonymousInner ai = new AnonymousInner();
       //            Device        
       ai.test(new Device("     ")
       {
         public double getPrice()
         {
          return 67.8;
         }
       });
       //            Device        
       Device d = new Device()
       {
         //     
         {
          System.out.println("          ...");
         }
         //       
         public double getPrice()
         {
          return 56.2;
         }
         //          
         public String getName()
         {
          return "  ";
         }
       };
       ai.test(d);
      }
    }
    
    
    3 운행
    전자 오실로그래프 를 하나 샀 는데 67.8 이 들 었 다.
    익명 내부 클래스 초기 화 블록...
    키 보드 를 하나 샀 는데 56.2 가 들 었 어 요.
    Device 를 부모 클래스 로 하 는 익명 내부 클래스 를 만 들 때 파 라 메 터 를 입력 할 수 있 고 부모 클래스 의 파 라 메 터 를 호출 하 는 구조 기 를 대표 합 니 다.매개 변 수 를 입력 하지 않 아 도 됩 니 다.부모 클래스 의 매개 변수 가 없 는 구조 기 를 호출 하 는 것 을 의미 합 니 다.
    익명 내부 클래스 를 만 들 때 인터페이스 나 추상 적 인 부모 클래스 의 모든 추상 적 인 방법 을 실현 해 야 합 니 다.필요 하 다 면,부류 의 일반적인 방법 을 다시 쓸 수도 있다.
    4 실전
    시선
    자바 8 에 앞서 자바 는 국부 내부 클래스,익명 내부 클래스 에 접근 하 는 부분 변 수 는 final 수식 을 사용 해 야 합 니 다.자바 8 부터 이 제한 이 취소 되 었 습 니 다.자바 8 은 더욱 스마트 합 니 다.국부 변수 가 익명 내부 클래스 에 접근 하면 이 부분 변 수 는 자동 으로 final 수식 을 사용 합 니 다.
    2 코드
    
    interface A
    {
      void test();
    }
    public class ATest
    {
      public static void main(String[] args)
      {
       int age = 8;   // ①
       //             
       //   age             ,  age    final   
       //age = 2;
       A a = new A()
       {
         public void test()
         {
          //  Java 8           :age    final  
          //  Java 8  ,     、          final     
          System.out.println(age);
         }
       };
       a.test();
      }
    }
    
    
    3 결과
    8
    설명
    자바 8 은 이 기능 을'effective final'이 라 고 부 릅 니 다.익명 의 내부 클래스 에 접근 하 는 부분 변 수 는 final 로 수식 할 수도 있 고 final 로 수식 하지 않 아 도 되 지만 final 수식 이 있 는 방식 으로 사용 해 야 한 다 는 뜻 입 니 다.즉,한 번 의 할당 후 에는 다시 할당 할 수 없습니다.
    더 많은 자바 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
    본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기