JAVA/자바 완전 정복

자바 완전 정복 13장 연습문제 풀이

GaeGim 2022. 7. 5. 00:17
반응형

1번. 다음과 같이 클래스 내부에 이너 클래스와 이너 인터페이스가 위치할 때 컴파일 이휴 생성되는 모든 .class 파일명을  쓰시오.

class A {					//A.class
	class B {}				//A$B.class
	interface C {}				//A$C.class
	class D {				//A$D.class
		void def() {		
        //지역이너클래스 : 아우터클래스+$+숫자+지역이너클래스+.class
			class E {}		//A$D$1E.class             
		}
	}
}

 

 

 

2번. 클래스 A 내부에 이너 클래스 B가 있을 때 다음 코드와 같이 b.bcd()의 결과가 "이너 클래스와 메서드"로 출력되도록 이너 클래스 객체를 생성하는 코드를 작성하시오(참조 변수명은 b로 정함).

class A {
	class B {
		void bcd() {
			System.out.println("이너 클래스와 메서드");
		}
	}
}

public static void main(String[] args) {
	A a = new A(); 			//외부 클래스 먼저 선언
	A.B b = a.new B();		//내부 클래스 추후 선언
    b.bcd();
}

 

 

 

3번. 실행 결과가 "클래스  A 메서드"가 나오도록 이너 클래스 B의 bcd() 메소드에서 클래스 A의 print() 메소드를 호출하는 코드를 작성하시오. 

class A {
	void print() {
		System.out.println("클래스 A 메서드");
	}
	class B {
		void print() {
			System.out.println("클래스 B 메서드");
		}
		void bcd( ) {
        //이너 클래스에서 아우터 클래스 멤버 참조 시 this 키워드 사용
			A.this.print();
		}
	}
}

public static void main(String[] args) {
	A a = new A();
	A.B ab = a.new B();
	ab.bcd();
}

 

 

 

4번. 클래스 A 내부에 정적 이너 클래스  B가 있을 때 다음 코드와 같이 b.bcd()의 결과가 "정적 이너 클래스와 메서드"가 출력되도록 정적 이너 클래스의 객체를 생성하는 코드를 작성하시오(참조 변수명은 ab로 정함).

class A {
	static class B {
		void bcd() {
			System.out.println("정적 이너 클래스의 메서드");
		}
	}
}

public static void main(String[] args) {
	A.B ab = new A.B();
	ab.bcd();
}

 

 

 

 

5번. 다음과 같이 이너 클래스 B는 bcd() 메서드를 포함하고 있으며, 여기에는 4줄의 실행문이 포함돼 있다. 각 실행문의 가능 여부를 O, X로 표기하고, X라면 그 이류를 쓰시오.

class A {
	int a=3;
	static int b=4;
	void method1() {
	}
	
	static void method2() {
	}
	static class B {
		void bcd() {
			System.out.println(a);
			System.out.println(b);
			method1();
			method2();
		}
	}
}

 

실행문 실행문 가능 여부(O, X) 오류가 발생한 이유
System.out.println(a); X static 클래스 내에서는
외부 static 필드와 메서드만 사용 가능.
(인스턴스 필드, 메서드 불가)
System.out.println(b); O
method1(); X
method2(); O

 

 

 

 

6번. 다음 코드는 오류를 포함하고 있다. 오류가 발생한 위치와 그 이유를 설명하시오.

class A {						// 1
	int m=3;					// 2
	int n=5;					// 3
	void abc() {					// 4
		int n=5;				// 5
		class B {				// 6
			void bcd() {			// 7
				m=m+1; System.out.println(m); // 8
				n=m+1; System.out.println(n); // 9
			}				// 10
		}					// 11
	}						// 12
}							// 13
오류가 발생한 행 번호 오류가 발생한 이유
9행 지역 이너 클래스 내부 지역변수는
final 지정자로 강제 선언되기 때문에
값을 변경할 수 없다.

 

 

 

 

7번. 다음과 같이 클래스 A 내에 이너 인터페이스 B가 있을 떄 이너 인터페이스의 객체를 생성하는 코드를 익명 이너 클래스 방법으로 작성하시오(객체의 참조 변수명은 ab로 하고, 메서드 오버라이딩일 때 메서드 내부는 비워 둠).

class A {
	interface B {
		void abc();
	}
}

public static void main(String[] args) {
	//이너 인터페이스의 객체 생성(익명 이너 클래스 이용)
	A.B ab = new A.B() {
    @Override
    public void abc() {}
	};
    ab.abc();
}

 

 

 

 

8번. 다음과 같이 이너 인터페이스 내부에  static 메서드가 있을 때 이 메서드를 호출하는 코드를 작성하시오.

class A {
	interface B {
		static void bcd() {
			System.out.println("이너 인터페이스 내 static 메서드");
		}
	}
}

public static void main(String[] args) {
	//이너 인터페이스의 객체 생성(익명 이너 클래스 이용)
	A.B.bcd();
}

 

 

 

반응형