본문 바로가기

자바기초

상속과 구성

상속(Inheritance)

- is A 구조

- 일반적인 개념과 구체적인 개념과의 관계

- 상위 클래스 : 일반적인 개념 클래스(ex. 포유류)

- 하위 클래스 : 구체적인 개념 클래스(ex. 사람, 원숭이, 고래...)

- 단순히 코드를 재사용하는 목적으로 사용하지 않음.

- 일반적인 클래스가 있고, 유사한 클래스를 만드는데, 기존의 클래스의 기능을 가져다가 좀 더 확장된 기능을 만들 때 상속을 사용.

- 다중 상속이 불가

- 상위 클래스는 하위 클래스보다 일반적인 개념과 기능을 가짐.

- 하위 클래스는 상위 클래스보다 구체적인 개념과 기능을 가짐.

 

class Apple extends Fruit

final : (클래스 앞에 붙을 경우) 상속 불가 클래스.

        (메소드 앞에 붙을 경우) 오버라이드 할 수 없는 메소드.

 

클래스에서 상속의 의미

: 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속받아서 속성이나 기능이 확장되는 클래스를 구현함.

 

 

하위 클래스가 생성되는 과정

- 하위 클래스가 생성될 때 상위 클래스가 먼저 생성됨.

 

- 상위 클래스의 생성자가 호출되고 하위클래스의 생성자가 호출됨.

  하위 클래스의 생성자에서는 무조건 상위 클래스의 생성자가 호출되어야 함.

 

- 하위클래스에서 상위 클래스의 생성자를 호출하는 코드가 없는 경우,

  컴파일러는 상위 클래스 기본 생성자를 호출하기 위한 super()를 추가함.

 

- super()로 호출되는 생성자는 상위 클래스의 기본 생성자.

 

- 만약 상위 클래스에 매개변수가 있는 생성자만 존재하는 경우,

  하위 클래스는 명시적으로 상위 클래스의 생성자를 호출해야 함.

 

 

상위 클래스로의 묵시적 형 변환(업캐스팅)

: 상위 클래스 형으로 변수를 선언하고 하위 클래스 인스턴스를 생성할 수 있음.

  하위 클래스는 상위 클래스의 타입을 내포하고 있으므로 상위 클래스로 묵시적 형변환이 가능.

  상속관계에서 모든 하위 클래스는 상위클래스로 묵시적 형 변환이 됨. (역은 성립하지 X)

 

Ex. (class VIPCustomer extends Customer일 때) Customer vc = new VIPCustomer();

 

 

protected

외부 클래스에는 private으로, 하위 클래스에는 public의 기능을 구현한 키워드

상위 클래스에 protected로 선언된 변수나 메서드는 다른 외부 클래스에서는 사용할 수 없지만 하위 클래스에서는 사용가능.

 

 

접근 제한자(access modifier)의 가시성

  외부 클래스 하위 클래스 동일 패키지 내부 클래스
public O O O O
protected X O O O
선언되지 않음
(default)
X X O O
private X X X O

 

 

 

구성(Composition)

has A 구조. (A가 핵심적 부분이 아니며, 구현 세부사항에 불과하다.)

- 한 클래스가 다른 클래스를 소유한 고나계

- 코드 재사용의 한 방법

 

class Fruit {

}

class Apple {

   private Fruit fruit = new Fruit();

}

 

https://www.artima.com/designtechniques/compoinh.html

'자바기초' 카테고리의 다른 글

코딩의 기본  (0) 2020.05.04
length 와 length() + size()  (0) 2020.05.01
내가 사용하는 Eclipse 단축키  (0) 2020.04.28
생성자  (0) 2020.04.28
쿠키, 세션, 캐시  (0) 2020.04.27