The Debugging Chronicles : "코드의 미학"

Mentor JAVA - section10. 상속 본문

JAVA/Mentor JAVA

Mentor JAVA - section10. 상속

sweetseonah1004 2024. 7. 21. 13:08

상속

- 상속이란?

· 부모 역할을 하는 클래스가 자식 역할을 하는 클래스에게 클래스 멤버와 메서드를 물려주는 것을 말한다.

· 재사용을 하기 때문에 중복을 줄여주고 수정을 최소화하는 특징을 가지고 있다. (유지보수 용이성)

· extends라는 키워드를 사용해 상속받을 클래스를 지명한다.

· 자식 클래스는 부모 클래스의 모든 멤버를 그대로 가져다 쓸 수 있다.

class 부모클래스명 { - } class 자식클래스명 extends 부모클래스명 { - }

상속에서의 생성자

- super()

· 부모 클래스의 생성자를 호출할 때 사용된다.

· 자식 클래스의 객체를 생성하기 위해 기본 생성자가 호출되면, super()라는 메서드를 통해 부모 클래스의 기본 생성자가 호출 된다.

그러므로, 개발자가 직접 생성자를 선언할 때 반드시 부모 클래스의 생성자를 호출해줘야한다.

// 1 자식클래스명(){ super(); } // 2 자식클래스명(매개변수1, 매개변수2){ super(매개변수1, 매개변수2); }

오버라이딩

- 부모 클래스를 상속받은 자식 클래스는 부모 클래스의 필드와 메서드를 가져와서 그대로 사용이 가능하지만, 필요에 의해 자식 클래스가

상속받은 메서드를 다시 구현하는 것을 오버라이딩이라고 한다.

- 자식 객체를 생성하여 해당 메서드를 호출하면, 자식 클래스에서 구현한 메서드가 실행된다.

- super 키워드와 함께 사용이 가능하다.

조건

1. 부모 크래스의 메서드 이름/반환 타입/매개변수와 동일해야 한다.

2. 부모 클래스의 메서드 보다 접근 제한을 줄일 수 있으나 접근 제한을 늘릴 수는 없다. (default → public (O), public → private (X))

접근 제한자

- 제한자(modifier)

· 클래스, 변수 도는 메서드의 선언부에 함께 사용해 부가적인 의미를 부여하는 키워드를 의미한다.

· 접근 제한자와 기타 제한자로 구분한다.

- 접근 제한자

· 모든 클래스와 모든 멤버에 외부에서 접근하지 못하도록 접근 권한을 제한할 수 있으며, 이것을 위한 것이 접근 제한자이다.

· 접근이 필요하지 않은 곳에서의 사용을 막거나, 특정 범위에서만 접근할 수 있게 한다. (정보 은닉)

종류

접근 제한자
의미
public
제한 없이 모든 패키지, 모든 클래스에서 접근 가능하다.
protected
같은 패키지 내에서만 접근이 가능하며, 다른 패키지라도 자식 클래스라면 접근이 가능하다.
default
같은 패키지 내에서만 접근이 가능하다.
private
같은 클래스 내에서만 접근이 가능하다

2차 상속

- 부모 클래스에서 상속받은 자식 클래스도 다른 클래스에게 상속해줄 수 있다는 것이다. (N차 상속 가능)

ex) class Car { } class Bus extends Car { // 1차 상속 } class SchoolBus extends Bus { // 2차 상속 }

final 클래스와 final 메소드

- final 키워드는 상수를 뜻해 필드 앞에 선언하여 사용하며, 초기화 이후 값을 바꿀 수 없으며 처음 정의된 상태로 변하지 않는다는 의미를 가진다.

- 이 효과는 클래스에서 사용이 가능하다.

- 생성자는 final을 추가할 수 없다.

- final 클래스

· 클래스 앞에 final을 추가할 경우, 이 클래스는 상속의 마지막 클래스임을 의미한다.

· 어떠한 클래스도 이 클래스의 자식 클래스가 될 수 없고, 이 클래스는 부모 클래스가 될 수 없다.

접근제한자 final class 클래스명 { - }

- final 메서드

· 메소드 앞에 final을 추가할 경우 상속받더라도, 오버라이딩을 할 수 없는 메서드 임을 뜻한다.

· 자식 클래스에서 선언된 메서드 그대로 사용해야 된다는 의미이다.

접근제한자 final 반환타입 메소드명(매개변수1, 매개변수2, ...) { - }