책/멘토씨리즈 자바

[멘토씨리즈 자바] 10 상속 응용문제

yn98 2024. 7. 22. 09:52

1. 다음 중 상속과 관련된 단어를 모두 고르세요.

  1. super
  2. super()
  3. this
  4. extends

2. 다음 코드를 실행했을 때 콘솔창에 출력되는 결과는 무엇입니까?

package section10;
 
class Person {
	void printHello() {
    	System.out.println("안녕하세요.");
    }
}
 
class Student extends Person {
}
 
public class PRACTICE_10_02 {
	public static void main(String[] args) {
    	Person p = new Person();
        p.printHello();
        
        Student s = new Student();
        s.printHello();
    }
}

 

더보기

안녕하세요.

안녕하세요.

3. <PRACTICE_10_02.java> 코드에서 class Student가 Person의 printHello()를 다음과 같이 오버라이드 했을 때, 출력되는 결과는 무엇입니까?

class Student extends Person {
	@Override
    void printHello() {
    	System.out.println("안녕하세요, 저는 자바를 공부하는 학생입니다.");
    }
}
더보기

안녕하세요.

안녕하세요, 저는 자바를 공부하는 학생입니다.

4. 다음 코드는 컴파일 에러가 발생합니다. 그 이유는 무엇이며 어떻게 해결해야 할까요?

package section10;
 
public class ClassA {
	private int a;
    
    private ClassA(int a) {
    	this.a = a;
    }
    
    public void methodA() {
    	System.out.println("ClassA클래스의 methodA() 메서드입니다.");
        System.out.println("필드 a의 값은 " + a + "입니다.");
    }
}

package section10;
 
public class ClassB {
	public static void main(String[] args) {
    	ClassA ca = new ClassA(3);
        ca.methodA();
    }
}
더보기

ClassA의 생성자의 접근제어자가 private이기 때문에  ClassB에서 접근할 수 없다.

5. 다음 두 개의 클래스는 상속 관계에 있으나, 다른 패키지에 속해 있습니다. Child 클래스에서 Parent 클래스의 parentMethod 메서드를 호출하기 위해 어떤 코드를 작성해야 할까요?

package section10.access1;
 
public class Parent {
	protected void parentMethod() {
    	System.out.println("parentMethod is called");
    }
}

package section10.access2;
import section10.access1.*;
 
public class Child {
	void accessParentMethod() {
    	`???`
    }
}
더보기

접근 제어자를 protected로 작성하면 된다.

package section10.access2;
import section10.access1.*;
 
public class Child extends Parent {
	void accessParentMethod() {
    	super.parentMethod();
    }
}