익명 객체
- 이름이 없는 객체. 명시적으로 클래스를 선언하지 않기 때문에 쉽게 객체를 생성할 수 있음
- 필드값, 로컬 변수값, 매개변수값으로 주로 사용
익명 자식 객체
- 부모 클래스를 상속받아 생성되는 객체
- 부모 타입의 필드, 로컬 변수, 매개변수의값으로 대입할 수 있음
출처, 이것이 자바다
package ch09.sec07.exam01;
/*
일반적인 메소드는 클래스이름에 구성요소로 관리가된다.
익명구현객체의 재정의된 메소드들은 클래스이름 하에 관리가 되지않고,
단 일회성으로 클래스 이름없이 사용이 되기 때문에 익명이라는 표현을 사용한다.
*/
public class Tire {
public void roll() {
System.out.println("일반 타이어가 굴러갑니다.");
}
}
package ch09.sec07.exam01;
public class Car {
//tire1 필드에 객체 대입
private Tire tire1 = new Tire();
void methodA() {
tire1.roll();
}
//익명구현객체 문법 사용이유?
//기존의 Tire클래스의 roll()메소드를 그대로 두고, 일회성으로 재정의하여 사용하는 경우
//익명 : 재정의 내용을 클래스에 추가해서 사용하지 않고, 클래스 이름없이 직접 사용한다.
private Tire tire2 = new Tire() {
//구성요소
//추가 메소드
void method() {}; //외부에서 접근 붋가능.
@Override
public void roll() {
System.out.println("익명 자식 Tire 객체 1이 굴러갑니다.");
method();
};
};
public void run1() {
tire1.roll();
tire2.roll();
}
public void run2() {
Tire tire = new Tire() {
@Override
public void roll() {
System.out.println("익명 자식 Tire 객체 2가 굴러갑니다.");
};
};
tire.roll();
}
public void run3(Tire tire) {
tire.roll();
}
}
package ch09.sec07.exam01;
public class CarExample {
public static void main(String[] args) {
Car car = new Car();
car.run1();
car.run2();
car.run3(new Tire() {
@Override
public void roll() {
System.out.println("익명 자식 Tire 객체 3이 굴러갑니다.");
}
});
}
}
익명 구현 객체
- 인터페이스를 구현해서 생성되는 객체
- 인터페이스 타입의 필드, 로컬변수, 매개변수의 값으로 대입할 수 있음
- 안드로이드와 같은 UI 프로그램에서 이벤트를 처리하는 객체로 많이 사용
출처, 이것이 자바다
package ch09.sec07.exam02;
public interface RemoteControl {
//추상 메소드
void turnOn();
void turnOff();
}
package ch09.sec07.exam02;
//익명 구현 객체는 아래와 같이 클래스로 구현 작업을 하지않고,
//일회성으로 직접 단 1번 사용하는 형태.
public class RemoteControlImpl implements RemoteControl {
@Override
public void turnOn() {
// TODO Auto-generated method stub
}
@Override
public void turnOff() {
// TODO Auto-generated method stub
}
}
package ch09.sec07.exam02;
public class Home {
private RemoteControl rc = new RemoteControl() {
@Override
public void turnOn() {
System.out.println("TV를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("TV를 끕니다.");
}
};
public void use1() {
rc.turnOn();
rc.turnOff();
}
public void use2() {
RemoteControl rc = new RemoteControl() {
@Override
public void turnOn() {
System.out.println("에어컨을 켭니다.");
}
@Override
public void turnOff() {
System.out.println("에어컨을 끕니다.");
}
};
rc.turnOn();
rc.turnOff();
}
public void use3(RemoteControl rc) {
rc.turnOn();
rc.turnOff();
}
}
package ch09.sec07.exam02;
public class HomeExample {
public static void main(String[] args) {
Home home = new Home();
home.use1();
home.use2();
home.use3(new RemoteControl() {
@Override
public void turnOn() {
System.out.println("난방을 켭니다.");
}
@Override
public void turnOff() {
System.out.println("난방을 끕니다.");
}
});
}
}
'객체 지향 프로그래밍 - 중첩 선언과 익명 객체' 카테고리의 다른 글
바깥 멤버 접근 (0) | 2023.01.25 |
---|---|
로컬 클래스 (0) | 2023.01.25 |
정적 멤버 클래스 (0) | 2023.01.25 |
중첩, 인스턴스 멤버 클래스 (0) | 2023.01.25 |