728x90
728x90

* 이 글은 제가 공부하기 위해 최대한 사실에 입각해 내용을 적으려고 하지만 일부 내용들이 정확하지 않을 수 있습니다.

   혹시나 잘못된 부분이 있으면 너그럽게 이해해주시고 피드백 부탁드려요!

 


1. 다음 ParentEx 클래스와 이 클래스를 상속받는 ChildEx 클래스를 보고 각 생성자의 코드를 보고 출력되는 순서를 작성하시오.

package chapter08;

public class Excercise1 {
	public static void main(String[] args) {
		ChildEx ce = new ChildEx();
	}
}

class ParentEx {
	ParentEx() {
		// TODO Auto-generated constructor stub
		this(1);
		System.out.println("(1)");
	}
	ParentEx(int x) {
		System.out.println("(2)");
	}
}

class ChildEx extends ParentEx {
	ChildEx() {
		this(1);
		System.out.println("(3)");
		
	}
	ChildEx(int x) {
		System.out.println("(4)");
	}
}
더보기

답 : 

(2)

(1)

(4)

(3)

 

자식객체인 ChildEx 클래스로 객체를 생성하였지만, 객체를 생성하는 순간 부모 클래스인 ParentEx 클래스의 생성자가 먼저 호출된다.

 

2. 위 문제의 ParentEx와 ChildEx 클래스 의 객체 간 형변환에 대해 올바르지 않은 것을 고르시오.

ParentEx pe = new ParentEx();
		
		pe = ce;  // 1
		pe = (ParentEx)pe; // 2
		ce = pe;  // 3
		ce = (ChildEx)pe; // 4
더보기

답 : // 3번

자식 객체는 부모 클래스 타입으로 자동형변환이 가능하지만 부모 객체를 자식 클래스 타입으로 변환하려면 반드시 강제 형변환을 해야한다. 

 

3. 아래 3개의 클래스가 있다. 이 클래스를 살펴 보고 공통적인 부분을 뽑아 상위 클래스를 생성해 상속받고자 한다. Character라는 클래스를 만들어 3개의 클래스들이 Character 클래스를 상속 받도록 코드를 작성해보자. (Character 클래스를 생성하고 아래 3개의 클래스는 다시 작성)

package chapter08;


public class Warrior {
	int hp;
	int power;
	int weapon;
	
	public void attack(Object target) {
		System.out.println("공격");
	}
	public void defence(Object target) {
		System.out.println("방어");
	}
}

class Gladiator {
	int hp;
	int power;
	int Shield;
	
	public void attack(Object target) {
		System.out.println("공격");
	}
	public void powerAttack(Object target) {
		System.out.println("파워공격");
	}
	
}

class Wizard {
	int hp;
	int power;
	int heal;
	
	public void attack(Object target) {
		System.out.println("공격");
	}
	public void healing(Object target) {
		System.out.println("치료마법");
	}
	
}
더보기
package chapter08;

class Character {
	int hp;
	int power;
	
	public void attack(Object target) {
		System.out.println("공격");
	}
}

public class Warrior extends Character{
	int weapon;

	public void defence(Object target) {
		System.out.println("방어");
	}
}

class Gladiator extends Character{
	int Shield;
	
	public void powerAttack(Object target) {
		System.out.println("파워공격");
	}
	
}

class Wizard extends Character{
	int heal;
	
	public void healing(Object target) {
		System.out.println("치료마법");
	}
	
}

공통적인 코드 hp, power 필드와 attack() 메서드를  Character 클래스에 정의하고, Warrior, Gladiator, Wizard 클래스는 Character 클래스를 상속받도록 수정

 

4. final에 대한 설명으로 올바른 것은?

1️⃣ final 필드는 값이 대입되면 수정할 수 없다.

2️⃣ final 메서드는 재정의 할 수 있다.

3️⃣ final 클래스는 상속받을 수 있다.

4️⃣ 상수는 private final로 정의한다.

더보기

답 : 1번

final 필드(변수)는 값이 저장된 후에는 변경할 수 없다.

728x90
300x250