상속의 필요성
코드 재사용
코드 확장
개발이 잘 된 부모 클래스가 있다면
코드 중복과 개발시간을 줄일 수 있다.
클래스의 수정을 최소화시킬 수 있다
상위클래스, parent 클래스, base 클래스(x),super 클래스
하위클래스, child 클래스, derived 클래스, sub 클래스
![](https://velog.velcdn.com/images/kgsong8020/post/3da16361-1cf5-42fc-9db4-b65a2019eb85/image.png)
코드의 안정성을 높이고
모호성을 낮추기 위해서
상위 클래스(부모클래스)가 하위 클래스(자식 클래스)보다 일반적인 개념이나 기능을 가지고 있을 때.
구체적인 기능 : 하위 클래스
인스턴스가 자기 자신의 주소값을 가진 것
클래스가 인스턴스를 가지고 있을 때, 자기 클래스를 호출 할 수 있는 기능
클래스에 선언되어 있는 필드와 메서드를 사용한다고 명시해줄때도 사용!
하위 클래스에서 가지는 상위클래스에 대한 참조 값
상위클래스의 기본 생성자를 호출함
생성자 오버로딩을 했을 때 기본생성자가 없으면 컴파일 에러 발생
상속받은 클래스(객체)의 인스턴스 생성 시
메모리 상에 부모 클래스가 먼저 생성
>자식 인스턴스 생성
이때 부모의 필드와 자식의 필드는 서로 독립적이다!
상속 관계에서는 모든 자식 클래스는 부모 클래스로 형변환이 가능(묵시적)
업캐스팅된 클래스를 다시 원래의 타입으로 형변환할때 사용
배열에서 animal에 다 집어넣었을거아님
Egle을 쓰려면 배열에서 egle을 빼내야하니까
그 때 다운캐스팅해서 사용
//근데 잘 안씀 이런게 있다~ 정도만 이해하자
물려받은 메서드를 자식 클래스에게 맞도록 수정하는 것
오버로딩 생성자 선언 시 이름을 제외한 시그니쳐를 다르게 선언하는것
오버라이딩 상속 받은(필드나) 메서드를 변경하는 것
(재정의)
재정의를 통해 매서드 변경시 부모x 자기 자신의 메소드를 우선적으로 사용함.
규칙
부모 클래스와 동일한 시그니처를 사용해야한다. 반환타입까지도!
기능만 바꿀 수 있다
부모 클래스의 메서드보다 접근 범위를 더 좁게 수정 불가
추가적인 예외가 발생할 수 있음을 나타낼 수 없다.
주석
컴파일러에게 특별한 정보를 제공해주는 역할
오버라이드 애노테이션을 사용하면 컴파일러가 부모에 있는 메서드, 시그니쳐, 반환값을 잘 사용했는지 체크해줌
= 오류메세지 출력
정확하게 오버라이딩이 되었는지 체크하고 문제없으면 실행
Protected : (외부 : private / 자식 : public)
클래스 파일을 묶어서 관리하기 위한 수단으로 파일 시스템의 폴더를 이용
도메인(url 주소)을 역순으로 만들기도.
여러 회사가 같이 개발하고 관리하는 클래스가 있을 경우
회사명을 제외한 패키지 이름을 맞춘다
주석문을 제외하고 반드시 첫 라인에 위치
패키지 이름은 모두 소문자로.
패키지 이름이 중복되지않게 회사의 도메인이름을 역순으로 사용
클래스 주제나 프로젝트 명을 적어주자.
다른 패키지에 있는 공개된 클래스를 사용하려면 패키지 경로를 컴파일러에게 알려주자
Import 패키지이름.클래스;
Import 패키지이름.*;
머시깽 - 했다