본문 바로가기

JAVA/DAY 15 _ 23.09.06

상속_array활용2

// Person 클래스와 상속 받을 하위 클래스들 정의

class Person {
    private String name;				// 공통 인스턴스 ★★★

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

    public String getDescription() {	// 각 클래스에서 객체의 정보를 문자열로 반환하는 메서드
        return "Name: " + name;		
        // 각 하위 클래스에서 '오버라이딩하여 해당 클래스의 정보를 반환하도록 구현'됨
    }
}
class Student extends Person {
    private String major;				// 개인 인스턴스

    public Student(String name, String major) {
        super(name);	// super(name)을 사용하는 이유 : 부모 클래스의 필드인 name을 초기화하기 위함
        		// Student 클래스의 생성자에서 name을 초기화하면서 부모 클래스인 Person의 생성자를 호출
        
	// if) super(name)을 빼고 name을 초기화하지 않는다?
    	// --> name 필드는 null 또는 초기화되지 않은 상태로 남게 될 것이며,
   	// 이는 예상치 못한 동작을 초래할 수 있음
        
        this.major = major;
    }

    @Override
    public String getDescription() {
        return super.getDescription() + ", Major: " + major;
    }
}
class Police extends Person {
    private String rank;				// 개인 인스턴스

    public Police(String name, String rank) {
        super(name);
        this.rank = rank;
    }

    @Override
    public String getDescription() {
        return super.getDescription() + ", Rank: " + rank;
    }
}
class FireMan extends Person {
    private String specialization;		// 개인 인스턴스

    public FireMan(String name, String specialization) {
        super(name);
        this.specialization = specialization;
    }

    @Override
    public String getDescription() {
        return super.getDescription() + ", Specialization: " + specialization;
    }
}

 

// Person 클래스를 상속받은 하위 클래스 객체들을 저장할 배열 생성

public class Serve_array_1 {

    public static void main(String[] args) {
    	
    Person[] people = {
        new Student("Alice", "Computer Science"),
        new Police ("Bob", "Officer"),
        new FireMan("Charlie", "Firefighter"),
        new Student("David", "Mathematics"),
        new FireMan("Eve", "Firefighter")
    };

    // 배열 요소를 반복문으로 처리
        for (Person p : people) {
            System.out.println(p.getDescription());
        }
        
        // person.getDescription : 문법적으로는 Person class의 것을 가져오는게 맞는데,
        // 오버라이딩했으니까~~~ 각 클래스마다 오버라이딩한 getDescription을 불러오겠지!!!!
    }
}

'JAVA > DAY 15 _ 23.09.06' 카테고리의 다른 글

Overiding  (0) 2023.09.13
상속_array활용3  (0) 2023.09.13
상속_array활용  (0) 2023.09.12
Object class  (0) 2023.09.12
TypeCasting  (0) 2023.09.12