Notice
Recent Posts
Recent Comments
관리 메뉴

Developer Gonie

[3주차] 57. 익명클래스, 존재하는 클래스의 메서드를 1회성으로 오버라이딩 혹은 새로운 메소드를 추가해서 사용. 혹은 인터페이스 혹은 추상클래스의 미완성된 추상메소드를 완성 본문

K-DigitalTraining 강의/1. Java

[3주차] 57. 익명클래스, 존재하는 클래스의 메서드를 1회성으로 오버라이딩 혹은 새로운 메소드를 추가해서 사용. 혹은 인터페이스 혹은 추상클래스의 미완성된 추상메소드를 완성

이대곤 2022. 6. 2. 01:35

* 익명클래스란?

  존재하는 클래스의 메서드를 1회성으로 오버라이딩 혹은 새로운 메소드를 추가해서 사용하고자 할 때 사용됨.
  인터페이스 혹은 추상클래스의 미완성된 추상메소드를 완성하여 객체를 생성하는 것도 가능함.
  (인터페이스 혹은 추상클래스는 객체를 생성하는게 불가능하였지만 이게 불가능했던 이유는 미완성이었기 때문임
    따라서, 미완성상태의 추상메소드를 익명클래스에서 완성시켜주면 이 둘도 객체를 생성하는게 가능함)

코드

class Inner1{
	int x = 2;
	
	void display() {
		System.out.println("x:" + x);
	}
}

class Inner2 extends Inner1{
	//물려받은 메서드 오버라이딩
	void display() {
		System.out.println("x:" + x*x);
	}
}

public class Ex07_08_익명클래스 {
	public static void main(String[] args) {
		Inner1 i1 = new Inner1();
		i1.display();
		
		Inner2 i2 = new Inner2();
		i2.display();
		
		//익명클래스로 객체를 만들면서 함수를 만들고 객체를 호출하는 것까지 
		new Inner1() {
			void display() { // 오버라이딩 된 메서드
				System.out.println("x*x*x:" + x*x*x);
			}
		}.display();
		
		
		new Inner2() {
			int y = 10;
			void show() {
				System.out.println("x*y:" + x*y);
			}
		}.show();
	}
}

실행결과

x:2
x:4
x:8
x*y:20

코드

* 인터페이스는 완성이 안된 상태였기 때문에 객체를 생성할 수 없었지만, 

   익명클래스로 미완성된 메소드를 완성시켜주면 객체를 생성하는게 가능해짐

interface RemoteControl{
	void turnOn();
	void turnOff();
}

class TV implements RemoteControl{

	@Override
	public void turnOn() {
		System.out.println("TV를 켠다");
	}

	@Override
	public void turnOff() {
		System.out.println("TV를 끈다");
	}
}

public class Ex07_09_익명클래스 {
	public static void main(String[] args) {
		TV tv= new TV();
		tv.turnOn();
		tv.turnOff();
		System.out.println();
		
		// 인터페이스는 미완성 상태이기 때문에 객체를 생성할 수 없지만, 익명클래스로 추상메소드를 완성하면 객체를 생성하는게 가능
		RemoteControl rc = new RemoteControl() {

			@Override // 인터페이스의 추상메소드 완성
			public void turnOn() {
				System.out.println("TV를 켠다222");
			}

			@Override // 인터페이스의 추상메소드 완성
			public void turnOff() {
				System.out.println("TV를 끈다222");
			}
		};
		
		rc.turnOn();
		rc.turnOff();	
	}
}

실행결과

TV를 켠다
TV를 끈다

TV를 켠다222
TV를 끈다222
 
 
 
 
Comments