super() //new Student("홍길동", "가산대학교")에서 호출되는 생성자
public Student(String name, String school) {
//파라미터 String name을 슈퍼 클래스의 생성자를 호출할 때 전달한다
super(name); //인수 name은 String 타입이므로 파라미터가 String인 Person 생성자가 호출된다
this.school = school;
}
1. 슈퍼 클래스의 메소드를 서브 클래스가 다시 만드는 것 (메소드 덮어쓰기)
2. 오버라이드하는 메소드는 @Override Annotation을 추가하는 것이 좋음 (권장이지만 필수로 하자)
3. 반드시 동일한 모습으로 오버라이드해야 함
package ex04_override;
public class Espresso {
public void taste() {
System.out.println("쓴 맛");
}
}
public class CafeLatte extends Espresso {
@Override //오버라이드한 메소드 (덮어쓰기하는 메소드), @Override를 붙여주면 문법 체크를 해주고 슈퍼 클래스랑 다르면 오류 표시
public void taste() {
System.out.println("라떼 맛");
}
}
메소드 오버라이드(method override)를 이용할 수 있다. Person p1 = new Student("고길동", "강원대학교"); //자식 객체 Student를 부모 타입으로 저장
Person p2 = new Alba("홍길동", "가산대학교", "투썸"); //자식 객체 Albe를 부모 타입으로 저장
// 서로 다른 타입의 Student와 Alba를 하나의 타입 Person으로 관리
p1.eat(); //eat = Person 메소드
p1.sleep(); //sleep = Person 메소드
p1.study(); //study = student 메소드
//원래 자식 메소드를 부모가 사용 못하지만 person에 있어야 호출할 수 있으니 person에 study 넣어주고 student에서 오버라이드하면 person으로도 사용할 수 있어짐
public static void ex01() {
Person p = new Student();
p.eat();
p.sleep();
((Student) p).study(); //슈퍼 클래스 타입 -> 서브 클래스 타입으로 변경(다운캐스팅)
((Worker) p).work(); //잘못된 캐스팅 (student를 work로 바꾸는것)
}
저장할 수 있는 java의 만능 타입 (업캐스트)(다운)캐스팅 (해결책이 오버라이딩, 다운캐스팅 두 가지지만 object 경우 오버라이딩은 object에 직접 코드 추가해야해서 못씀. 오브젝트는 다운캐스팅. 나머지는 주로 오버라이딩 사용)