상속 ( Inheritance ) 에 대해서 배워보자.
상속의 특징 : 코드 추가 및 수정에 용이함
-> 부모에게 정의하면 상속받은 자식들은 모두 부모의 것을 그대로 받아서 쓸 수 있음!
Person class(부모객체 클래스)
public class Person {
// 필드
private String name;
private int age;
private String nationality;
// 생성자
// 기본생성자;
public Person() {}
// 매개변수 생성자
public Person(String name, int age, String nationality) {
this.name = name;
this.age = age;
this.nationality = nationality;
}
// 메서드
// getter/setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNationality() {
return nationality;
}
public void setNationality(String nationality) {
this.nationality = nationality;
}
public void breath() {
System.out.println("사람은 코나 입으로 숨을 쉰다");
}
}
Student class(자식객체 클래스)
public class Student extends Person {
// Student 클래스에 Person 클래스내용을 연장한다.
private int grade;
private int classRoom;
public Student() {}
public Student(String name, int age, String nationality, int grade, int classRoom) {
this.grade = grade;
this.classRoom = classRoom;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public int getClassRoom() {
return classRoom;
}
public void setClassRoom(int classRoom) {
this.classRoom = classRoom;
}
}
오버라이딩(overriding)
부모클래스에서
public void move() {
System.out.println("사람은 움직일 수 있다.");
}
자식클래스에서
@Override
public void move() {
System.out.println("오버라이딩된 move()");
System.out.println("효율적으로 빨리 일하고 움직인다");
}
이렇게 자식클래스에 맞게 오버라이딩 해줄 수 있다.
@Override 어노테이션 : 해당 메소드가 오버라이딩 되었음을 컴파일러에게 알려주는 역할
-> 컴파일러에게 문법 체크를 하도록 알린다
toString()을 오버라이딩시키는 경우가 많다.
@Override
public String toString() {
return name + " / " + age + " / " + nationality;
}
Object 에있는 toString()을 오버라이딩시켜 나열하는 방식에 변화를 줄 수 있다.