본문 바로가기
  • 비둘기다
  • 비둘기다
  • 비둘기다
코딩/JAVA Basics

[자바 JAVA] 상속

by parzival56 2022. 12. 5.

상속이란 부모 클래스를 자식 클래스가 물려받는 것을 의미합니다. 이를 좀 더 정확히 하자면 자식 클래스가 부모 클래스를 물려받는 것이 확정되면 자식 클래스 안에는 자동으로 부모 클래스의 객체가 생성됩니다. 

// 부모 클래스
class Car {
}
// 자식 클래스
class engine extends Car {
	Car car;
}

이렇게 자식클래스가 부모 클래스를 상속받는 것을 extends라는 키워드를 사용합니다. 

상속받게 되면 자식 클래스는 부모 클래스의 모든 부분들을 사용할 수 있게 됩니다. 그러나 자식 클래스에서 부모 클래스의 특정 메서드들을 수정하고 싶을 때 메서드 오버 라이딩을 사용합니다.

 

메서드 재정의 (Overriding)

오버라이딩은 재정의를 하는 것입니다. 그렇기 때문에 반드시 부모 클래스에서 같은 이름의 메서드가 존재해야 가능한 기능입니다. 오버 라이딩의 조건으로는 부모 클래스와 동일한 시그니처(리턴 타입, 메서드 이름, 매개변수 리스트)를 가져야 합니다. 그리고 접근 제한을 더 좁게 수정할 수 없습니다. 그리고 예외처리를 할 수 없습니다.

오버 라이딩이 불가능한 것으로는 private, static, final 메서드가 있습니다. 

 

오버 라이딩은 위에 언급했다시피 부모 클래스의 재정의할 메서드와 시그니처가 동일해야 합니다. 

선택사항으로는 어노테이션이 있는데 @Override를 재정의하기 전에 써주면 IDE에서 자동으로 오버 라이딩 형식을 갖춰줍니다. 

class Person {
	void show() {
        	sysoprint("나는 사람입니다.");
    }
}

class Korean extends Person {
    @Override
    void show() {
    	sysoprint("나는 한국인입니다.");
    }
}

자식 클래스와 부모 클래스 모두 생성자가 필요합니다. 그래서 자식 클래스의 생성자는 자연스럽게 부모 클래스의 생성자를 호출하기 때문에 자식에게는 있는 생성자가 부모에게 없을 시에 오류가 발생하게 됩니다. 

생성자에 들어가는 키워드 중 this와 비슷하게 사용하는 super라는 키워드가 있습니다. super는 this와는 다르게 부모의 생성자를 호출하고 반드시 생성자의 첫 줄에 작성해야 합니다.

super

접근 제어 지시자

접근 제어 지시자란 public과 같이 해당 변수, 메서드, 클래스 등에 접근할 수 있는 범위를 조절하는 지시자입니다.

이에는 public, defalut, protected, private가 있으며 넓은 범위 순서대로 public > protected > default > private입니다.

*주의 사항

private 멤버는 자식 클래스에 상속되지 않음

클래스 멤버는 어떤 접근 지정자로도 지정할 수 있지만, 클래스는 protected와 private으로 지정할 수 없음

메서드 오버라이딩 시 부모 클래스의 메소드보다 가시성을 더 좁게 할 수 없음

public을 default나 private으로 수정 불가 ▪ 반대로 default는 public으로 수정 가능

 

final

⚫final 필드 : 수정 불가 필드

⚫final 클래스 : 부모로 사용 불가한 클래스 (대표적인 예가 String 클래스)

⚫final 메서드 : 자식이 오버라이딩할 수 없는 메소드

 

이상 객체 지향의 특성 중 하나인 상속에 대해 알아봤습니다.

 

댓글