이것이 자바다 7장 확인문제
-
자바의 상속에 대한 설명 중 틀린 것은 무엇입니까?
① 자바는 다중 상속을 허용한다.
② 부모의 메소드를 자식 클래스에서 재정의(오버라이딩) 할 수 있다.
③ 부모의 private 접근 제한을 갖는 필드와 메소드는 상속의 대상이 아니다.
④ final 클래스는 상속할 수 없고, final 메소드는 오버라이딩 할 수 없다.1번 정답
답 : ①
자바는 다른 언어와 달리 다중 상속을 허용하지 않는다. -
클래스의 타입 변환에 대한 설명 중 틀린 것은 무엇입니까?
① 자식 객체는 부모 타입으로 자동 타입 변환된다.
② 부모 객체는 항상 자식 타입으로 강제 타입 변환된다.
③ 자동 타입 변환을 이용해서 필드와 매개 변수의 다형성을 구현한다.
④ 강제 타입 변환 전에 instanceof 연산자로 변환 가능한지 검사하는 것이 좋다.2번 정답
답 : ②
항상 부모 객체가 자식 타입으로 변환될 수 있는 것은 아니다.
자식 타입이 부모 타입으로 자동 변환한 후, 다시 자식 타입으로 변환할 때 사용 가능하다. -
final 키워드에 대한 설명으로 틀린 것은?
① final 클래스는 부모 클래스로 사용할 수 있다.
② final 필드는 값이 저장된 후에는 변경할 수 없다.
③ final 메소드는 재정의(오버라이딩) 할 수 없다.
④ static final 필드는 상수를 말한다.3번 정답
답 : ①
final 키워드를 class 앞에 붙이면 이 클래스는 최종적인 클래스이므로 상속할 수 없는 클래스이다.
(부모 클래스로 사용 불가능) -
오버라이딩(Overriding) 에 대한 설명으로 틀린 것은?
① 부모 메소드의 시그너처(리턴 타입, 메소드명, 매개 변수) 와 동일해야 한다.
② 부모 메소드보다 좁은 접근 제한자를 붙일 수 있다. ( 예 public (부모) → private (자식) )
③ @Override 어노테이션을 사용하면 재정의가 확실한지 컴파일러가 검증한다.
④ protected 접근 제한을 갖는 메소드는 다른 패키지의 자식 클래스에서 재정의할 수 없다.4번 정답
답 : ④
protected 접근 제한자는 같은 패키지 내에서는 접근 제한이 없지만
같은 패키지의 자식 클래스와 다른 패키지라도 상속받은 자식 클래스에서는 사용(재정의)할 수 있다. - Parent 클래스를 상속해서 Child 클래스를 다음과 같이 작성했는데, Child 클래스의 생성자에서 컴파일 에러가 발생했습니다. 그 이유를 설명해보세요.
Parent.java
1 2 3 4 5 6 7
public class Parent { public String name; public Parent(String name) { this.name = name; } }
Child.java
1 2 3 4 5 6 7 8
public class Child extends Parents { private int studentNo; public Child(String name, int studentNo) { this.name = name; this.studentNo = studentNo; } }
5번 정답
답 : 자식 클래스에서 부모 생성자를 호출해야 한다.
1 2 3 4 5 6 7 8 9
public class Child extends Parents { private int studentNo; public Child(String name, int studentNo) { // this.name = name; (X) super(name); //부모 생성자 호출 this.studentNo = studentNo; } }
- Parent 클래스를 상속밭아 Child 클래스를 다음과 같이 작성했습니다. ChildExample 클래스를 실행했을 때 호출되는 각 클래스의 생성자의 순서를 생각하면서 출력 결과를 작성해보세요.
Parent.java
1 2 3 4 5 6 7 8 9 10 11 12 13
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"); } }
Child.java
1 2 3 4 5 6 7 8 9 10 11 12 13
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"); } }
ChildExample.java
1 2 3 4 5
public class ChildExample { public static void main(String[] args) { Child child = new Child(); } }
6번 정답
답 : 출력 결과
- Parent(String nation) call
↓ - Parent() call
↓ - Child(String name) call
↓ - Child() call
Child 객체를 생성하면 Child child = new Child();
먼저 Child 클래스(자식)가 상속받고 있는 Parent 생성자(부모)로 초기화 진행
기본 생성자를 수행하다보면 this(“대한민국”); 을 만나서 Parent(String nation) 먼저 수행
다시 Parent() 로 돌아와서 수행
Child 생성자에서 this(“홍길동”); 을 만나서 Child(String name) 호출
다시 Child()를 수행
- Tire 클래스를 상속받아 SnowTire 클래스를 다음과 같이 작성했습니다. SnowTireExample 클래스를 실행했을 때 출력 결과는 무엇일까요?
Tire.java
1 2 3 4 5
public class Tire { public void run() { System.out.println("일반 타이어가 굴러갑니다. "); } }
SnowTire.java
1 2 3 4 5 6
public class SnowTire extends Tire { @Override public void run() { System.out.println("스노우 타이어가 굴러갑니다. "); } }
SnowTireExample.java
1 2 3 4 5 6 7 8 9
public class SnowTireExample { public static void main(String[] args) { SnowTire snowTire = new SnowTire(); Tire tire = snowTire; snowTire.run(); tire.run(); } }
7번 정답
답 : “스노우 타이어가 굴러갑니다. “ “스노우 타이어가 굴러갑니다. “
snowTire.run() 는 SnowTire 의 객체이므로
스노우 타이어가 굴러갑니다. 출력tire.run() 은 메소드 오버라이딩으로 자식 객체의 메소드가 출력되기 때문에
스노우 타이어가 굴러갑니다. 출력 -
A, B, C, D, E, F 클래스가 다음과 같이 상속 관계에 있을 때 다음 빈칸에 들어올 수 없는 코드는?
B b = [ 빈칸 ]
메소드 선언 : void method(B b) {…}
메소드 호출 : method( [ 빈칸 ] )① new B()
② (B) new A() //강제 타입 변환
③ new D() //자동 타입 변환
④ new E() //자동 타입 변환8번 정답
답 : ②
강제 타입 변환(Casting)은 부모 타입을 자식 타입으로 변환하는 것으로
자식 타입이 부모 타입으로 자동 변환되어 있을 경우 다시 자식 타입으로 변환하는 경우에만 가능하다.A a = new B(); //부모타입 변환
B b = (b) a; //다시 자식 타입으로 강제 타입 변환
🌞 정보 : 공부 기록용 블로그입니다. 오타나 내용 오류가 있을 경우 알려주시면 감사하겠습니다.
댓글남기기