본문 바로가기
Java/연습문제

[명품자바] 5장 상속 이론문제(1)

by Meaning_ 2021. 7. 11.
728x90
반응형

1번

 

다음 클래스에 대해 물음에 답하라

 

class A{
  private int a;

  public void set(int a){ this.a=a;}

}

class B extends A{

 protected int b,c;

}

class C extends B{

 public int d,e;

}

클래스 D를 다음과 같이 작성했을 때 오류가 발생하는 라인을 모두 찾아라

 

class D extends C{

  public void f(){

        a=1; -->private으로 접근지정을 해줬기 때문 

        set(10);

        b=20;

        d=30;

}

 

3번

 

 

4번 

 

다음 중 설명에 적절한 단어를 기입하라

 

자바에서 상속받는 클래스를 서브클래스라고 부르며, extends 키워드를 이용하여 상속을 선언한다. 상속받은 클래스에서 상속해준 클래스의 멤버를 접근할 때 super키워드를 이용한다. 한편, 객체가 어떤 클래스의 타입인지 알아내기 위해서는 instanceof 연산자를 이용하며, 인터페이스는 클래스와 달리 interface 키워드를 이용하여 선언한다.

 

5번

 

상속에 관련된 접근지정에 대한 설명이다. 틀린 것은?

 

1) 슈퍼클래스의 private 멤버는 서브클래스에서 접근할 수 없다. 

2) 슈퍼클래스의 protected멤버는 같은 패키지에 있는 서브 클래스에서만 접근할 수 있다.

3) 슈퍼클래스의 public 멤버는 모두 다른 클래스에서 접근할 수 있다.

4) 슈퍼 클래스의 디폴트 멤버는 같은 패키지에 있는 모든 다른 클래스에서 접근 가능하다. 

 

이유) 상속관계이면 다른 패키지에 있는 클래스에도 접근 가능하다.

 

6번

 

다음 빈칸에 적절한 한줄의 코드를 삽입하라

 

 

class TV{
  priavte int size;

  public TV(int n){size=n;}

}

 

class ColorTV extends Tv{

   private int colors;

   public ColorTV(int n,int colors){

        super(n);

        this.colors=colors;

   }

}

 

7번

 

상속에 있어서 생성자를 묻는 문제이다. 실행될 때 출력되는 내용은 무엇인가?

 

class A {
  public A() { System.out.println("A"); }
  public A(int x) { System.out.println("A: " + x); }
}
class B extends A {
  public B() { super(100); }
  public B(int x) { System.out.println("B: " + x); }
}
public class Example {
  public static void main(String[] args) {
  B b = new B(11);
  }
}

답) 

A

B: 11

 

부모 클래스의 디폴트 생성자 먼저 호출 후 서브클래스 생성자 호출

 

8번

 

다음 코드에서 생성자로 인한 오류를 찾아내어 이유를 설명하고 오류를 수정하라

 

 

A클래스에 매개변수가 없는 디폴트 생성자가 존재하지 않기 때문에 에러가 뜬것.

생성자의 접근지정자가 protected인것은 아무 상관이 없다!

 

방법1

부모 클래스 A에 디폴트 생성자를 넣는다.

 

방법2 (추천!)

super(0); 을 넣음으로써 클래스 A의 A(int i) 생성자 호출 

728x90
반응형

댓글