2013-05-06 4 views
1

자바에서 abstract class에 대한 샘플을 만들려고 시도했을 때 실수로 익명의 내부 클래스를 Eclipse에서 얻었습니다.익명 내부 클래스 란 무엇입니까?

아래 코드를 붙여 넣었습니다. abstract class이 익명의 클래스와 어떤 관련이 있는지 이해할 수 없습니다.

package com.Demo; 

abstract class OuterClass { 
    abstract void OuterClassMethod(); 
} 

public abstract class InnerClass extends OuterClass { 
    public static void main(String[] args) { 
     InnerClass myInnerClass = new InnerClass() { 
      @Override 
      void OuterClassMethod() { 
       int OuterClassVariable = 10; 
       System.out.println("OuterClassVariable" + " " + OuterClassVariable); 
      } 
     }; 
    } 
} 
+0

특별한 방법으로는 관련이 없습니다. 그것은 단지 "일반적인 추상 클래스"일뿐입니다. 익명 클래스는 "정상적인"Java 클래스를 통해 구현되고 상속 (추상 유형 포함) 및 인터페이스 계약은 동일하게 작동합니다. – user2246674

답변

1

익명 클래스는 추상 클래스 또는 인터페이스의 클래스, 일반적으로 (그러나 반드시)의 "인라인"구체적인 구현입니다. 이것은 기술적으로 확장/구현 된 수퍼 클래스의 하위 클래스입니다.

Google에 대한 자세한 내용은

0

예제에서 클래스 (InnerClass)는 클래스 (OuterClass)를 확장하고 추상 클래스를 확장하는 일반적인 동작 인 추상 메서드를 구현합니다. 같은 방식으로 클래스가 인터페이스를 구현한다면 추상 메소드를 오버라이드해야합니다. 이것은 Anonymous inner class를 구현하는 방법입니다.

0

기본적으로 익명 클래스는 이름이 없으므로 "익명"비트로 구현됩니다.

InnerClass myInnerClass = new InnerClass(); 

을하지만,이 경우의 새로운 구현을 지정하는 : 당신은 그냥 사용하는 것이 일반 클래스 인스턴스화에서

InnerClass myInnerClass = new InnerClass() { 
     @Override 
     void OuterClassMethod() { 
      int OuterClassVariable = 10; 
      System.out.println("OuterClassVariable" + " " + OuterClassVariable); 
     } 
    }; 

:

이 특정 비트 익명 클래스를 만드는 것입니다 그 클래스 내의 함수 (OuterClassMethod())를 오버라이드 (override) 해 다른 인스턴스 인 InnerClass의 경우 InnerClass의이 특정 인스턴스 만 적용했고 새 클래스에이 새 구현을 저장하지 않았기 때문에 OuterClassMethod()은 원래 구현을 유지합니다. 익명 클래스를 원하지 않는 경우

, 대신 이렇게 :

어딘가에, InnerClass을 확장 AnotherInnerClass를 지정하고 그 기능을 오버라이드 (override) :

class AnotherInnerClass extends InnerClass { 
    @Override 
    void OuterClassMethod() { 
     int OuterClassVariable = 10; 
     System.out.println("OuterClassVariable" + " " + OuterClassVariable); 
    } 
}; 

을 그리고 다음과 같은 인스턴스화 :

AnotherInnerClass myInnerClass = new AnotherInnerClass();