[JAVA]상속

army246·2022년 4월 14일
0

JAVA

목록 보기
4/10

📌 상속(extends)

상속은 이미 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 중복되는 코드를 줄여준다.
상속을 이용하면 부모 클래스의 수정으로 모든 자식 클래스들도 수정되기 때문에 유지 보수 시간을 최소화할 수 있다.

class 자식클래스 extends 부모클래스 {
	// 멤버변수
    // 생성자
    // 메소드
{

상속 예약어가 extends인 이유는 단순하게 소스만 물려받는 것만을 의미하는 것이 아니라
자식클래스에서 멤버변수나 메소드를 추가로 확장했을 때 의미를 갖기 때문에 inheritance가 아니라 확장이라는 의미를 갖는 extends를 사용한다.

❗️ 자바 상속 특징
자바에서 상속은 단일 상속만을 지원하기 때문에 extends 뒤에는 단 하나의 부모 클래스만 와야 한다.
부모 클래스에서 private 접근 제한을 갖는 멤버변수와 메소드는 상속 대상에서 제외된다.
부모 클래스와 자식 클래스가 다른 패키지에 존재한다면 default 접근 제한을 갖는 멤버변수와 메소드도 상속 대상에서 제외된다.

📌 오버라이딩(Overriding)

❗️ 메소드 오버라이딩

부모 클래스의 일부 메소드가 자식 클래스에서 사용하기 적합하지 않을 수 있기 때문에 상속된 일부 메소드는 자식 클래스에서 다시 정의해서 사용해야 한다. 이런 경우를 메소드 재정의(overriding) 이라고 한다.

메소드 재정의

  • 부모의 메소드와 동일한 시그니처(리턴 타입, 메소드 이름, 매개 변수 목록)을 가져야 한다.

  • 접근 제한을 더 강하게 재정의 할 수 없다.
    예를 들어서 부모 메소드가 public 이면 재정의하는 자식 메소드는 default 나 private 접근 제한으로 수정할 수 없다는 뜻이다.
    단, 반대는 가능하다 부모가 default 이면 자식 메소드는 default 나 public접근 제한을 가질 수 있다.

  • 새로운 예외(Exception)fmf throws 할 수 없다.

📌 super()

부모의 생성자를 호출할 때 사용한다.
부모의 기본 생성자가 자동으로 호출된다. 만약 부모 클래스에 기본 생성자가 없다면 super()를 사용해서 특정 생성자를 호출해야한다.

📌 final

메소드를 선언할 때 final 키워드를 붙이면 재정의할 수 없는 메소드가 된다.
부모 클래스에서 final로 선언된 메소드는 자식클래스에서 재정의 할 수 없다.
클래스 앞에 final이 선언되었으면 상속을 하지 못한다.
멤버 변수 앞에 final을 선언하면 해당 멤버변수는 상수가 된다.

📌 타입 변환

❗️ 묵시적 타입 변환

묵시적 타입 변환은 자식 객체가 부모 타입의 참조변수에 할당되는 것을 말한다.
참조 변수가 자신이 선언된 타입보다 더 많은 멤버 변수를 가지고 있는 객체를 참조하는 것을 말하는데
실제 참조 변수를 통해서 사용할 수 있는 멤버 변수는 참조 변수가 선언된 클래스에 속한 변수만을 사용할 수 있다.

자식 객체를 부모 타입의 참조변수에 할당하는 것은 가능
부모 객체를 자식 타입 참조 변수에 할당하는 것은 불가능

참고
혼자 공부하는 자바

profile
천천히 꾸준히

0개의 댓글