차근차근 개발자 되기

Java

12일차: Java 상속(필드/메소드 오버라이딩/생성자) - 2021.06.30

wellow 2021. 6. 30. 23:25

목차

1.1  상속: 필드

1.2  상속: 메소드

1.3  상속: 생성자

1.4  상속: 접근제어자

 

1. 상속(Inheritance)                                   → ★SuperSub00 / SuperSub01 참고

- 자식(하위, 파생) 클래스가 부모(상위) 클래스의 멤버를 물려받는 것

- 상속 대상: 부모의 필드와 메소드 (생성자는 상속 X)

- 상속 방법: ‘자식 클래스명’ extends ‘부모 클래스명

 

1) 상속에서의 필드                                          → ★SuperSub04 / SuperTest02~04 참고

은닉 변수(= 쉐도우 변수)

: 부모 클래스에 있는 필드를 자식 클래스에서 재정의(동일한 이름의 변수를 생성)하면, 기본적으로 자식 클래스에서 재정의한 필드만 사용 가능하다.

 

- super : 부모 클래스를 의미한다.

- super.X : 부모 클래스의 은닉된 필드를 호출할 때 사용된다.

- super.X는 자식 클래스의 메소드 안에서만 사용할 수 있다.

 

* super. - 부모 클래스에 있는 은닉된 멤버변수와 메소드를 호출할 때 사용

* super() - 부모 클래스의 매개변수를 가진 생성자를 호출할 때 사용

 

2) 메소드 오버라이딩(Method Overriding)           → ★SuperSub05 참고

- 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의해서 사용하는 것

- 은닉 메소드는 super.메소드명()으로 호출할 수 있고, 자식 클래스의 메소드 안에서 이루어져야 한다.

 

3) 상속에서의 생성자

1. 생성자는 기본적으로 상속이 되지 않는다.

2. 자식클래스를 이용해서 객체를 생성할 때 자식클래스의 생성자(기본생성자, 매개변수 있는 생성자 모두 가능)가 호출되면, 부모클래스의 기본생성자가 자동으로 호출된다.

→★SuperTest05 참고

3. 매개변수가 있는 생성자가 있는 경우에는 더이상 컴파일러가 기본 생성자를 자동으로 생성해 주지 않는다. →★SuperTest06 참고           

4. 부모 클래스의 매개변수가 있는 생성자를 자식 클래스에서 호출할 때는 super()를 이용해서 호출할 수 있다. →★SuperTest06 참고

(, super()는 자식 클래스의 생성자 안에서만 사용 가능함.)

5. super()를 이용해서 부모 클래스의 생성자를 호출할 때, 부모 클래스 기본 생성자는 호출되지 않는다. →★SuperTest06 참고

 

4) 접근제어자 protected

 

상속 관계 O / 같은 패키지 O

 - 2개의 클래스(부모, 자식 클래스)가 같은 패키지 안에 들어있을 때는 부모의 접근제어자가 default, protected, public 접근제어자인 경우에 자식 클래스에서 접근할 수 있다. (, private접근제어자만 자식 클래스에서 접근할 수 없음)

 

상속 관계 O / 같은 패키지 X

 - 2개의 클래스(부모, 자식 클래스)가 다른 패키지 안에 들어있을 때는 부모의 접근제어자가 protected, public 접근제어자인 경우에 자식 클래스에서 접근할 수 있다.

 

상속 관계 X / 같은 패키지 X

 - 2개의 클래스가 서로 다른 패키지 안에 들어 있을 때는 public 접근제어자로 되어 있어야만 다른 클래스에서 접근할 수 있다.