모든 클래스는 Object라는 클래스를 기본적으로 상속받고 있다. extends Object를 쓰지 않아도 알아서 상속한다.
equals(), hashCode(), toString() 등의 메서드를 선언하지 않고 사용하는 것은 Object클래스에 이미 마련되었기 때문!
오버라이딩
상위 클래스에서 선언된 메서드를 상속받은 자식 클래스에서 재정의하는 것 ( = 덮어쓰기)
메서드의 이름, 반환형, 매개변수가 모두 동일해야 한다! = 단지 메서드 내부 로직이 바뀌는 것!
반드시 상속 관계에서만 사용 가능
어노테이션 표시를 해야 한다. (권장)
조상보다 더 큰 예외를 던질 수 없다.
class Car { void startEngine() { System.out.println("엔진이 켜졌습니다."); } }
class ElectricCar extends Car { // 오버라이딩: ElectricCar만의 방식으로 startEngine 메서드를 다시 정의합니다. @Override // 어노테이션 void startEngine() { System.out.println("전기 엔진이 조용히 켜졌습니다."); } }
public class Main { public static void main(String[] args) { ElectricCar myElectricCar = new ElectricCar(); myElectricCar.startEngine(); // "전기 엔진이 조용히 켜졌습니다." 출력 } }
//객체 생성 Movie movie1 = new Movie(1, "인터스텔라", "놀란", "스릴러", 300); Movie movie2 = new Movie(2, "마더", "봉준호", "공포", 100); Movie movie3 = new Movie(3, "아바타", "카메룬", "판타지", 92);