관리 메뉴

프로그래밍 삽질 중

상속(inheritance) 설명 및 문제 본문

과거 프로그래밍 자료들/자바(Java)

상속(inheritance) 설명 및 문제

평부 2021. 3. 3. 23:47

※ 상속(inheritance)  사용시 주의할 점

- 상속 : 상위 클래스 특성(필드, 메소드)을 하위 클래스에 물려주는 것

- 슈퍼 클래스 : 특성을 물려주는 상위 클래스

- 서브 클래스 : 특성을 물려받는 하위 클래스

- 오버라이딩 : 슈퍼 클래스의 특성(메소드) 수정

* 슈퍼 클래스의 private 멤버는 상속되지 않음, 서브 클래스에서 직접 접근 불가

→ 슈퍼 클래스의 private 멤버는 슈퍼 클래스의 메소드를 통해 접근

 

- 자바의 접근지정자는 public, protected, default, private

* 각 특징은 '접근지정자와 접근자(getter), 설정자(setter) 설명 및 문제 참고'

→ 상속 관계에서 주의할 접근자 : private, protected

 

- super() : 서브클래스에서 명시적으로 슈퍼 클래스와 생성자를 선택 호출 시 사용

예) super(parameter);

→ 인자를 이용해 슈퍼 클래스의 적당한 생성자 호출

→ 반드시 서브 클래스 생성자 코드의 제일 첫 라인에 와야 함

 

 

 

[문제 1]

Person 클래스 생성 

1) String name, String addr 생성

2) Person(String name, String addr)

3) String toString() → "Person[name=?, address=?]"

 

Student 클래스 생성

1) String program, int year addr, double fee

2) Student(String name, String addr, int year, double fee)

3) String toString → "Student[Person[name=?, address=?, program=?, year=?, fee=?]"

 

Stafff 클래스 생성

1) String school, double pay

2) Staff(String name, String addr, String school, double pay)

3) String toString() → "Staff[Person[name=?, address=?], school=? pay=?]"

 

[출력값]

Person[name=혜원, address=송혜원네]
Staff[Person[name=재하, address=재하네], school=리틀포레스트, pay=2018.0]
Student[Person[name=은숙, address=은숙이네], program=리틀포레스트, year=3, fee=42000.0]
Student[Person[name=혜원의 엄마, address=송혜원네], program=리틀포레스트, year=20, fee=30000.0]

 

 

 

 

 

[문제 1 답]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
class Person {
    private String name;
    private String addr;
    public Person() {}
    public Person(String name, String addr) {
        this.name = name;
        this.addr = addr;
    }
    public String getName() {
        return name;
    }
    public String getAddr() {
        return addr;
    }
    public void setAddr(String addr) {
        this.addr = addr;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String toString() {
        return String.format("Person[name=%s, address=%s]"
                                name, addr);
    }
    
}
 
class Student extends Person{
    private String program;
    private int year;
    private double fee;
    
    public Student(String name, String addr, String program, int year, double fee) {
        super(name, addr); //Person 클래스 상속
        this.program = program;
        this.year = year;
        this.fee = fee;
    }
    
    public String toString() {
        return String.format("Student[%s, program=%s, year=%d, fee=%.1f]"
                        super.toString(), program, year, fee);
    }
 
    public String getProgram() {
        return program;
    }
    public void setProgram(String program) {
        this.program = program;
    }
    public int getYear() {
        return year;
    }
    public void setYear(int year) {
        this.year = year;
    }
 
}
class Staff extends Person {
    private String school ;
    private double pay;
    
    public Staff(String name, String addr, String school, double pay) {
        //부모객체가 생성되어야 함
        super(name, addr); //2개이상 값 입력됨 //Person 클래스 상속
        this.school = school;
        this.pay = pay;
//        super.setAddr(addr);
//        super.setName(name);
    }
    public String getSchool() {
        return school;
    }
    public void setSchool(String school) {
        this.school = school;
    }
    public double getPay() {
        return pay;
    }
    public void setPay(double pay) {
        this.pay = pay;
    }
    public String toString() {
        return String.format("Staff[%s, school=%s, pay=%.1f]",
                                super.toString(), school, pay);
    }
    
}
 
public class PersonEx {
 
    public static void main(String[] args) {
        Person p = new Person("혜원""송혜원네");
        Staff st = new Staff("재하""재하네""리틀포레스트"2018);
        Student std1 = new Student("은숙""은숙이네""리틀포레스트"342000);
        Student std2 = new Student("혜원의 엄마""송혜원네""리틀포레스트"2030000);
        System.out.println(p.toString());
        System.out.println(st.toString());
        System.out.println(std1.toString());
        System.out.println(std2.toString());
 
    }
 
}
cs