(혼) (공) (자)

익명클래스

만석이 2024. 1. 22. 18:16
1. 다른 내부 클래스와는 달리 이름이 없는 클래스이다.

2. 익명 클래스는 클래스의 선언과 객체의 생성을 동시에 하므로 한 번만 사용할수있다.

3. 오직 하나의 객체만을 생성할수 있는 일회용 클래스

4. 따라서 생성자를 선언할 수도 없으며, 둘 이상의 인터페이스를 구현할수도 없다.

5.인터페이스의 기능을 구현할때 사용한다.

6.인터페이스를 클래스를 직접 생성하여 구현하는것이 아니라 익명클래스로 선언하여 기능을 직접 구현할수있다.

 

 

 

 

바로 예시를 보자

package Ex2_anoymous_class;


abstract public class Person {
public abstract void myself();
}
person클래스는 추상메서드를 만들어주었다.
package Ex2_anoymous_class;


public class Student extends Person {


@Override
public void myself() {
System.out.println("저는 학생입니다.");
}


}
Student 클래스는 person 클래스를 상속받고 
추상메서드를 이어받아 myself메서드를 정의해주었다.
package Ex2_anoymous_class;


public class PersonMain {
public static void main(String[] args) {


//person클래스를 확장하기위해서 자식클래스를 만들어서 사용
Person p = new Student();
p.myself();
//Person을 상속받아 처리하는 클래스가 또 필요하지만
//한번만 사용할거라면 굳이 자식클래스를 만들어서 사용할 필요없다.


Person p2 =new Person() {


@Override
public void myself() {


System.out.println("저는 직장인입니다.");
}
};


p2.myself();
}
}
PersonMain를 중요하게 봐야한다. 

일반 클래스 객체생성
Person p = new Student();
p.myself();




익명클래스
Person p2 =new Person() {


@Override
public void myself() {


System.out.println("저는 직장인입니다.");
}
};


p2.myself();
}
}

객체생성이 끝날때 ' ; '  (세미콜론)을 붙여주지 않고 
바로 중괄호를 붙여주며 myself() 메서드에 접근하여
오버라이딩하는것을 볼수있다.