중복되는 코드를 줄여준다. 부모 클래스의 수정으로 모든 자식 클래스들도 수정되는 효과를 가져오기 때문에 유지 보수 시간을 최소화한다.
extends 뒤에 어떤 부모 클래스를 상속받을 것인지 결정
필드, 메소드에 접근이 가능하다.
자식 객체를 생성하면, 부모 객체가 먼저 생성되고 그 다음에 자식 객체가 생성된다
→ 부모 생성자는 자식 생성자의 맨 첫 줄에서 호출된다
상속된 이부 메소드는 자식 클래스에서 다시 수정해서 사용
@Override 어노테이션 → 메소드가 정확히 재정의된 것인지 컴파일러가 확이
public final class String {…}
클래스 선언 시 final 키워드를 class 앞에 붙이면 최종적인 클래스가 되어 자식 클래스를 만들 수 없음
메소드 선언 시 final 키워드를 앞에 붙이면 최종적인 메소드가 되어 재정의 할 수 없음
다형성 : 사용 방법은 동일하지만 다양한 객체를 이용한 다양한 실행 결과가 나오도록 하는 성질
메소드 재정의 + 타입 변환 → 다형성
자동 타입 변환 : 자식은 부모 타입으로 자동 타입 변환이 가능하다
자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근이 가능하다
필드 타입을 부모 타입으로 선언하면 다양한 자식 객체들이 저장될 수 있기 때문에 필드 사용 결과가 달라질 수 있다
매개변수에 자식 객체를 지정
클래스 타입의 매개변수가 선언 → 그 클래스를 상속 받은 타입의 매개값을 넘겨주었을 때, 자동 타입 변환
부모 타입을 자식 타입으로 변환하는 것, 자식 타입을 부모 타입으로 자동 변환한 후 다시 자식 타입을 변환할 때 가능
boolean result = 좌항(객체) instanceof 우항(타입)
추상 : 실체 간에 공통되는 특성을 추출한 것
실체 클래스 : 객체를 직접 생성할 수 있는 클래스
추상 클래스 : 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스
공통된 필드와 메소드의 이름을 통일할 목저
실체 클래스를 작성할 때 시간 절약, 규격
클래스 선언에 abstract 키워드를 붙인다
new 연산자를 통해 객체를 만들지 못하고, 상속을 통해 자식 클래스만 만들 수 있음
추상 메소드 : 하위 클래스에 반드시 실행 내용을 채우도록 강제하고 싶은 메소드가 있을 경우 선언