상속은 객체 지향 프로그래밍의 핵심 요소 중 하나로, 기존 클래스의 필드와 메소드를 새로운 클래스에서 재사용하게 해준다. 기존 클래스의 속성과 기능을 그대로 물려받는 것이다
상속을 사용하려면 extends 키워드 사용. extends 대상은 하나만 선택 가능
ex) public class ElectricCar extends Car
자바는 다중 상속을 지원하지 않는다. 따라서 부모를 하나만 선택할 수 있다.
상속의 최상위 조장 클래스는 java.lang.Object이다.
서브 클래스의 생성자가 먼저 호출되고 슈퍼 클래스가 호출되지만, 슈퍼 클래스의 생성자가 먼저 실행된 후 서브 클래스의 생성자가 실행된다.
자식 클래스로 객체를 만들면 부모 클래스까지 포함해서 인스턴스를 생성한다. 따라서 참조값은 하나지만 실제로 그 안에는 두 가지 클래스 정보가 공존한다. 따라서 자식 클래스와 부모 클래스에 모두 존재하는 메서드를 호출할 때는 호출하는 변수의 타입(클래스)을 기준으로 선택한다. 하지만 호출하려는 메서드가 자식 타입에 없으면 부모 타입으로 올라가서 찾는다. 만약 부모에서도 해당 기능을 찾지 못하면 더 상위 부모에서 필요한 기능을 찾아본다. 최상위 부모까지 올라갔지만 찾지 못하는 경우에는 컴파일 오류가 발생한다.
부모에게서 상속 받은 기능을 자식이 재정의 하는 것. (자식의 새로운 기능이 부모의 기존 기능을 넘어 새로운 기능으로 덮어짐)
선언되어 있으나 구현되어 있지 않은 메소드, abstract로 선언
추상 메서드는 서브 클래스에서 오버라이딩하여 구현해야된다.
추상 클래스는 객체를 생성할 수 없다.
추상 클래스의 상속은 크게 추상 클래스의 단순 상속과 구현 상속으로 구분된다.
추상 클래스는 슈퍼클래스에서는 개념을 정의하고 각 서브 클래스에서 구체적 행위를 구현할 수 있는 용도로 사용된다. 즉 설계와 구현이 분리되는 것이다.
메서드 이름이 같고 매개변수가 다른 메서드를 여러 개 정의하는 것

서브 클래스 객체를 슈퍼 클래스 타입으로 타입 변환하는 것
슈퍼 클래스 객체를 서브 클래스 타입으로 변환하는 것