이것이 자바다 7장 확인문제 풀이

Lee Seung Jae·2021년 5월 23일
0

이것이 자바다 7장 확인문제

1. 자바의 상속에 대한 설명중 틀린 것은 무엇입니까?

답 - 1.자바는 다중 상속을 허용한다.
자바는 단일상속을 원칙으로 한다.

2. 클래스 타입 변환에 대한 설명 중 틀린 것은?

답 - 2.부모 객체는 항상 자식 타입으로 강제 타입 변환된다.
변환 될 수 있다.

3. final 키워드에 대한 설명으로 틀린 것은?

답 - 1. final클래스는 부모 클래스로 사용할 수 있다.
final이 붙은 클래스는 상속이 불가능하다. 따라서 부모 클래스로 사용할 수 없다.

4. Overriding에 대한 설명으로 틀린 것은?

답 - 4. protected 접근 제한을 갖는 메소드는 다른 패키지의 자식클래스에서 재정의할 수 없다.
protected 접근제한자는 같은 패키지 내 또는 자식클래스라면 다른 패키지에서도 재정의 할 수 있다.

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

Parent.java

  public class Parent{
      public String name;

      public Parent(String name){
          this.name = name;
      }
  }

Child.java

public class Child extends Parent{
    private int studentNo;

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

답 - 자식클래스에서 부모 클래스를 호출하지를 않았다.

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

Parent.java

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

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

public class ChildExample{
    public static void main(String[] args){
        Child child = new Child();
    }
}

해설 - Child객체를 생성했는데 Child클래스가 Parent클래스를 상속받고 있으므로 Parent 생성자로 먼저 초기화를 진행한다
그래서 기본 생성자를 수행하는 도중 this()를 만나서 Parent(String nation)을 먼저 수행한다. 다음에 Parent()를 수행한다. 그리고 Child 생성자를 수행하는데 여기서도 기본 생성자인 Child() 에서 this("홍길동") 를 부르기 때문에 Child(String name) 호출 후 Child()를 수행한다.

- Parent(String nation) call => Parent() call => Child(String name) call => Child() call

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

Tire.java

public class Tire{
    public void run(){
    	System.out.println("일반 타이어가 굴러갑니다.");
    }
}

SnowTire.java

public class SnowTire extends Tire{
    @Override
    public void run(){
        System.out.println("스노우 타이어가 굴러갑니다.");
    }
}

SnowTireExample.java

public class SnowTireExample{
    public static void main(String[] args){
    	SnowTire snowTire = new SnowTire();
        Tire tire = snowTire;
        
        snowTire.run();
        tire.run();
    }
}

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

해설 - snowTire.run()은 Tire 클래스의 구현객체이므로 Override한 "스노우 타이어가 굴러갑니다." 를 수행한다.
tire.run()은 tire는 tire클래스를 구현하고있는 snowTire를 넣어 초기화를 시켜줬기 때문에 tire.run()도 마찬가지로 "스노우 타이어가 굴러갑니다." 를 수행한다.

profile
💻 많이 짜보고 많이 경험해보자 https://lsj8367.tistory.com/ 블로그 주소 옮김

0개의 댓글