기존의 클래스 코드를 재사용하여 새로운 클래스를 작성할 수 있게 하는 문법
기존의 코드에 필요한 부분을 수정, 추가하여 새로운 코드를 작성
👉🏻 멤버필드, 생성자, 메소드를 중복으로 작성하지 않고 비슷한 기능의 다른 클래스를 만들 수 있음
클래스 정의코드의 재사용성을 높일 수 있음 ➡ 코드의 중복작성을 줄여줌
부모클래스 : 상속을 주는 클래스 / 상위, super, Based
자식클래스 : 상속을 받는 클래스 / 하위, sub, Derived
메소드의 호출코드(사용코드)와 정의코드(구현코드)가 연결되는 과정
프로그램 동작 전에 바인딩되는 것
👉🏻 객체 변수를 선언할 때 사용한 데이터타입(클래스타입)의 정의코드로 바인딩함
프로그램 실행 중 메소드가 호출될 때 바인딩되는 것
👉🏻 동적으로 생성된 인스턴스의 데이터타입(클래스 타입)의 정의코드로 바인딩
new 동적 연산자 : 실행되고 new를 만났을 때 동적 연산결과를 반환 ➡ 동적 바인딩

Parent2 pc = new Child2();
상속받은 메소드의 기능(코드)을 재정의
오버라이딩 규칙이 잘 지켜졌는지 유효성 검사를 해줌 👉🏻 규칙에 맞지 않은 메소드를 작성하면 문법 에러 발생
어노테이션, Annotation : 코드의 부가적인 기능, 특별한 의미 등을 부여할 때 사용@ 기호를 이용하여 표현자식클래스에서 부모클래스의 멤버에 접근할 때 사용
👀 example
this.num = 10; ➡ 자식클래스의 멤버필드
super.num = 20; ➡ 부모클래스의 멤버필드
this.method(); ➡ 오버라이딩한 자식클래스의 메소드
super.method(); ➡ 부모클래스의 메소드
부모클래스의 디폴트생성자를 호출하는 코드
super();가 생략되어있음 👉🏻 따로 작성하지 않아도 자동으로 추가됨( )에 추가해 부모클래스의 매개변수 있는 생성자를 호출할 수 있음❔ 부모클래스에 매개변수가 있는 생성자가 있어도 부모 디폴트 생성자를 작성하는 이유
👉🏻 매개변수가 있는 생성자를 작성하면 JVM이 디폴트 생성자를 자동으로 추가해주지 않음.
자식 클래스에서 생성자를 작성하는 경우 super(); 코드가 자동으로 생략추가되는데, 이때 부모클래스에 디폴트 생성자가 없는 경우 불러올 생성자가 없어 오류가 발생하게 됨
더 이상 확장(변경)할 수 없도록 설정하는 키워드
public final int MAX = 5;
public static final int LEN = 10;
public final void out() {
}
public final calss Chaild() {
}