-
[JAVA] 익명클래스(Anonymous class)JAVA 2021. 10. 3. 17:50
익명클래스는 이름이 없는 inner 클래스이다. 클래스 정의와 동시에 객체를 생성할 수 있다. 부모 클래스를 상속하는 방식으로 정의한다.
익명클래스의 목적은 부모 클래스를 상속받는 서브 클래스를 생성하지 않고도, 단일 객체를 만들어서 부모 클래스에 정의된 동작에서 행위를 추가할 수 있다는 것이다.
예시)
Test t1 = new Test(){ public int num = 10; @Override public int getNum(){ return this.num; } };
이처럼 부모클래스 Test를 상속받아 오버라이드를 해, 굳이 클래스파일을 생성치 않고 즉석에서 만들 수 있다.
하지만 익명클래스는 결국 부모클래스 인스턴스에 넣기 때문에 부모클래스에서 추상화하지 않는 메소드에 대해선 호출이 되지 않는다.
Person p = new Person() { String name = "Kim"; public void callMe() { System.out.println("Call callMe method"); } @Override void whoAmI() { System.out.println("나는 " + name + " 이다."); } }; //p.callMe(); //실행되지 않는다. p.whoAmI();
익명클래스는 인터페이스로도 활용할 수있다.
public interface Remocon { public void on(); public void off(); } public class Machine { Remocon tv = new Remocon() { @Override public void on() { System.out.println("TV을 켭니다"); } @Override public void off() { System.out.println("TV을 끕니다."); } }; }
이렇게 인터페이스임에도 불구하고 익명클래스로 선언과 초기화까지 할 수있다.
또한 매개변수로도 활용 할 수있는데, 사용법은 이와 같다.
public void radioWork() { Remocon radio = new Remocon() { @Override public void on() { System.out.println("Radio을 켭니다"); } @Override public void off() { System.out.println("Radio을 끕니다."); } }; radio.on(); radio.off(); } public void machineWork(Remocon remocon) { remocon.on(); remocon.off(); }
이렇게 선언 후에 메인함수로 가,
machine.radioWork(); machine.machineWork(new Remocon(){ @Override public void on() { System.out.println("컴퓨터를 켭니다."); } @Override public void off() { System.out.println("컴퓨터를 켭니다."); } });
이런식으로 파라미터로 익명클래스를 넘길 수도 있다.
참고한 자료 출처 : 익명클래스 사용방법 (yookeun.github.io)
'JAVA' 카테고리의 다른 글
[Java]Optional 활용법 (0) 2021.12.17 [Java] Optional (0) 2021.12.17 [Java] java8 stream (0) 2021.12.17 [Java] 메소드 참조(method reference) (0) 2021.12.16 [JAVA] 람다식 (lamda Expression)와 함수형 인터페이스(Functional Interface) (0) 2021.10.04