JAVA/자바 완전 정복

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

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

Q1. 다음의 클래스 A는 오류를 포함하고 있다. 오류가 발생한 위치와 그 이유를 설명하시오.

class A {			//1
    int a = 3;			//2	
    fianl int b = 5;		//3
    A() {			//4
    	a = 7;			//5
        b = 9;			//6
    }				//7
}				//8

 

오류가 발생한 행 번호 오류가 발생한 이유
6 3행에서 final 필드가 이미 정의되어 있는데 생성자에서 필드를 또 정의하고 있기 때문이다. final 변수는 한 번 값이 정의되면 다시 정의할 수 없다. 수정이 불가하다.

 

 

 

 

Q2. 다음은 2개의 메서드를 포함하고 있는 클래스 A를 상속받아 클래스 B를 정의하는 코드로, 오류를 포함하고 있다. 오류가 발생한 위치와 그 이유를 설명하시오.

1class A {
2    void abc() { System.out.println( "클래스 A의 abc() 메서드"); }
3    final void bcd() { System.out.println( "클래스 A의 bcd() 메서드"); }
4}
5class B extemds A {
6    void abc() { System.out.println( "클래스 B의 abc() 메서드"); }
7    final void bcd() { System.out.println( "클래스 B의 bcd() 메서드"); }
8}

 

오류가 발행한 행 번호 오류가 발생한 이유
7 클래스 A의 bcd() 메서드는 최종 메서드로, 오버라이딩이 불가하다. 따라서 이의 자식 클래스 B는 bcd()를 오버라이딩이 불가하기 때문에 오류가 발생한 것이다.

 

 

 

 

Q3. 다음은 A, B, C, D 클래스 간의 상속 구조 를 자바로 표현한 것으로, 오류를 포함하고 있다. 오류가 발생한 위치와 그 이유를 설명하시오.

class A {}			//1
class B extends A {}		//2
final class C extends B {}	//3
final class D extends C {}	//4

 

오류가 발행한 행 번호 오류가 발생한 이유
4 클래스 D는 클래스 C를  상속받는 자식클래스이다. 하지만 클래스 C는 final 지정자가 붙은 최종 클래스로서, 상속이 불가하다. 따라서 클래스 D는 클래스 C를 상속받을 수 없기 때문에 오류가 발생한 것이다.

 

 

 

 

Q4. 다음은 추상 메서드 하나를 포함하고 있는 추상 클래스 A를 정의한 것이다. 문법적으로 틀린 부분을 모두 찾아 수정하시오.

class A {
    void abc();
}

 

수정본)

추상 메서드, 추상 클래스임을 명시해 줘야 한다.

추상 클래스는 추상 메서드를 하나라도 포함하면 추상 클래스임을 명시해야 한다.

abstract class A {
    abstract void abc();
}

 

반응형