UniCode
[이것이 자바다]CH07.상속(확인문제풀이) 본문
1. 자바의 상속에 대한 설명 중 틀린 것은 무엇입니까?
① 자바는 다중 상속을 허용한다.
☞ 자바는 다른 언어와 달리 다중 상속을 허용하지 않는다. -> 하나만 상속 가능
2. 클래스 타입 변환에 대한 설명 중 틀린 것은 무엇입니까?
② 부모 객체는 항상 자식 타입으로 강제 타입 변환된다.
☞ 강제 타입 변환은 부모 클래스 타입으로 변환된 자식 객체만 가능하다.
3. final 키워드에 대한 설명으로 틀린 것은?
① final 클래스는 부모 클래스로 사용할 수 있다.
② final 필드는 값이 저장된 후에는 변경할 수 없다.
③ final 메소드는 재정의(오버라이딩)할 수 없다.
④ static final 필드는 상수를 말한다.
☞ ① final 클래스는 부모 클래스로 사용할 수 있다.
클래스를 선언할 때 final 키워드를 class 앞에 붙이게 되면 이 클래스는 최종적인 클래스이므로 상속할 수 없는 클래스가 된다.
대표적인 예 ) 자바 표준 API에서 제공하는 String클래스
4. 오버라이딩(Overriding)에 대한 설명으로 틀린 것은?
① 부모 메소드의 시그니처(리턴 타입, 메소드명, 매개 변수)와 동일해야 한다.
② 부모 메소드보다 좁은 접근 제한자를 붙일 수 없다. (ex: public(부모) -> private(자식))
③ @Override 어노테이션을 사용하면 재정의가 확실한지 컴파일러가 검증한다.
④ protected 접근 제한을 갖는 메소드는 다른 패키지의 자식 클래스에서 재정의할 수 없다.
☞ ④ protected 접근 제한을 갖는 메소드는 다른 패키지의 자식 클래스에서 재정의할 수 없다.
protected : 같은 패키지 또는 다른 패키지내의 상속받은 자식 클래스에서 사용 가능
5. Parent 클래스를 상속해서 Child 클래스를 다음과 같이 작성했는데, 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; (X)
super(name); // 부모 생성자 호출
this.studentNo = studentNo;
}
}
6. Parent 클래스를 상속받아 Child 클래스를 다음과 같이 작성했습니다. ChildExample 클래스를 실행했을 때 호출되는 각 클래스의 생성자의 순서를 생각하면서 출력 결과를 작성해보세요.
public class Parent{
public String nation;
// 부모 생성자1
public Parent(){
this("대한민국"); // 자신의 생성자 호출 (부모 생성자 2 호출)
System.out.println("Parent() call");
}
// 부모 생성자2
public Parent(String nation){
this.nation = nation;
System.out.println("Parent(String nation) call");
}
}
public class Shild extends Parent{
private String name;
//자식 생성자 1
public Child(){
// super(); // 컴파일 시 자동 생성 (부모 생성자 1 호출)
this("홍길동"); // 자신의 생성자 호출 (자식 생성자 2)
System.out.println("Child() call");
}
//자식 생성자 2
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();
}
}
☞ 실행 순서 : 부모생성자2 > 부모생성자1 > 자식생성자2 > 자식생성자1
접근 순서 : 자식생성자1 > 부모생성자1 > 부모생성자2 > 자식생성자2
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; // 자동 타입 변환 (= Tire tire = new SnowTire();)
snowTire.run();
tire.run();
}
}
☞ snowTire.run() > 스노우 타이어가 굴러갑니다 출력
tire.run() > 스노우 타이어가 굴럽갑니다 출력
tire : 부모 클래스에 정의된 필드, 메소드 , 자식클래스에서 오버라이딩된 메소드 사용가능
8. A, B, C, D, E, F 클래스가 다음과 같이 상속 관계에 있을 때 다음 빈칸에 들어올 수 없는 코드는 ?
B b = □ 메소드 선언 : void method(B b) {......} 메소드 호출 : method(□) |
① new B( )
② (B) new A( ) // 강제 타입 변환
③ new D( ) // 자동 타입 변환
④ new E( ) // 자동 타입 변환
☞ 강제 타입 변환 : 부모클래스 변수명1 = new 자식클래스();
자식클래스 변수명2 = (자식클래스) 변수명1;
자식 타입이 부모 타입으로 자동 변환 되어 있을 경우만 가능
'이것이 자바다' 카테고리의 다른 글
[이것이 자바다]CH09.중첩 클래스와 중첩 인터페이스(확인문제풀이) (0) | 2021.05.02 |
---|---|
[이것이 자바다]CH08.인터페이스(확인문제풀이) (0) | 2021.05.02 |
[이것이 자바다]CH06.클래스(확인문제풀이)-③ (0) | 2021.03.29 |
[이것이 자바다]CH06.클래스(확인문제풀이)-② (0) | 2021.03.28 |
[이것이 자바다]CH06.클래스(확인문제풀이)-① (0) | 2021.03.28 |