공부하는 히욤이

[이것이 자바다] Chapter 07 확인문제 본문

Programming/Java

[이것이 자바다] Chapter 07 확인문제

히욤이 2021. 5. 6. 00:24

1. 자바의 상속에 대한 설명 중 틀린 것은 무엇입니까? 
① 자바는 다중 상속을 허용한다.
② 부모의 메소드를 자식 클래스에서 재정의(오버라이딩) 할 수 있다.
③ 부모의 private 접근 제한을 갖는 필드와 메소드는 상속의 대상이 아니다.
④ final 클래스는 상속할 수 없고 final 메소드는 오버라이딩 할 수 없다.

답 :
자바는 다중 상속을 허용하지 않음

 


2. 클래스 타입 변환에 대한 설명 중 틀린 것은 무엇입니까? 
① 자식 객체는 부모 타입으로 자동 타입 변환된다.
② 부모 객체는 항상 자식 타입으로 강제 타입 변환된다.
③ 자동 타입 변환을 이용해서 필드와 매개 변수의 다형성을 구현한다.
④ 강제 타입 변환 전에 instanceof 연산자로 변환 가능한지 검사하는 것이 좋다.

답 :
안 되는 것도 있음

 


3. final 키워드에 대한 설명으로 틀린 것은? 
① final 클래스는 부모 클래스로 사용할 수 있다.
② final 필드는 값이 저장된 후에는 변경할 수 없다.
③ final 메소드는 재정의(오버라이딩)할 수 없다.
④ static final 필드는 상수를 말한다.

답 :
final이 붙으면 상속이 불가능하다.

 


4. 오버라이딩(Overriding)에 대한 설명으로 틀린 것은? 
① 부모 메소드의 시그너처(리턴 타입, 메소드명, 매개 변수)와 동일해야 한다.
② 부모 메소드보다 좁은 접근 제한자를 붙일 수 없다. ex) public(부모) -> private(자식).
③ @Override 어노테이션을 사용하면 재정의가 확실한지 컴파일러가 검증한다.
④ protected 접근 제한을 갖는 메소드는 다른 패키지의 자식 클래스에서 재정의 할 수 없다.

답 :
다른 패키지의 자식 클래스에서 재정의 가능

 


5. Parent 클래스를 상속해서 Chile 클래스를 다음과 같이 작성했는데, Child 클래스의 생성자에서 컴파일 에러가 발생했습니다. 그 이유를 설명해보세요. 

public class Parent{
	public String name;

	public Parent(String name) {
		this.name = name;
	}
}
public class Child extends Parent {
	private int studentNo;

	public Child(String name, int studentNo) {
		this.name = name;
		this.studentNo = studentNo;
	}
}


답 : 자식 생성자가 호출 될 때 super()를 통해 부모 생성자가 먼저 호출 되는데 parent의 경우 매개값을 받는 생성자가 있기 때문에 child 생성자 맨 첫줄에 String 타입의 매개값을 가진 super(name) 메소드를 호출 해준다.


6. Parent 클래스를 상속받아 Child 클래스를 다음과 같이 작성했습니다. ChildExample 클래스를 실행했을 때 호출되는 각 클래스의 생성자의 순서를 생각하면서 출력 결과를 작성해보세요. 

Public class Parent{
	public String nation;

	public Parent() {
		this("대한민국");
		System.out.println("Parent() call");
	}

	public Parent(String nation) {
		this.nation = nation;
		System.out.println("Parent(String nation) call")
	}
}
public class Child extends Parent {
	private String name;

	public Child(){
		this("홍길동");
		System.out.println("Child() call");
	}

	public Child(String name) {
		this.name = name;
		System.out.println("Child(String name) call");
	}
}
public class ChildExample{
	public static void main(String[] args) {
	Child child = new Child();
	}
}



답 : Parent(String name) call 
Parent() call 
Child(String name) call
Child() call 

 



7. Tire 클래스를 상속받아 SnowTire 클래스를 다음과 같이 작성했습니다. SnowTireExample 클래스를 실행했을 때 출력 결과는 무엇일까요? 

public class Tire{
	public void run() {
		System.out.println("일반 타이어가 굴러갑니다.");
	}
}
public class SnowTire extends Tire {
	@Override
	public void run() {
		System.out.println("스노우 타이어가 굴러갑니다.");
	}
}
public class SnowTireExample{
	public static void main(String[] args) {
		SnowTire snowTire = new SnowTire();
		Tire tire = snowTire;

		snowTire.run();
		tire.run();
	}
}



답 : 스노우 타이어가 굴러갑니다.
스노우 타이어가 굴러갑니다.

 


8. A,B,C,D,E,F 클래스가 다음과 같이 상속 관계에 있을 때 다음 빈칸에 들어 올 수 없는 코드는? 
① new B() 
② (B) new A() //강제 타입 변환 
③ new D() //강제 타입 변환 
④ new E() //자동 타입 변환 

답 : ② (b) new A()