-
[JAVA] 클래스 상속Language/Java 2021. 6. 5. 22:26
클래스 상속- 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속받아서 속성이나 기능을 확장하여 클래스를 구현한다.
- 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야할 때 기존 클래스를 상속
- 상속하는 클래스(super class), 상속받는 클래스(sub class)
클래스 상속 문법
class B extends A{
}- extends 키워드 뒤에는 하나의 클래스만 올 수 있다.
- 클래스 B는 A클래스를 상속 받았음을 알 수 있다.
- 자바는 단일 상속만을 지원한다.
상속을 구현하는 경우- 상위 클래스는 하위 클래스보다 더 일반적인 개념과 기능을 가진다.
- 하위 클래스는 상위 클래스보다 더 구체적인 개념과 기능을 가진다.
- 하위 클래스가 상위 클래스의 속성과 기능을 확장한다는 의미
protected 접근 제어자
- 상위 클래스에 선언된 private 멤버 변수는 하위 클래스에서 접근 할 수 없다.
- 외부 클래스는 접근 할 수 없지만, 하위 클래스는 접근할 수 있도록 protected접근 제어자를 사용한다.
하위 클래스 생성 과정
- 하위 클래스를 생성하면 상위 클래스가 먼저 생성된다.
=> 하위 클래스의 생성자에서 super( )가 실행된다. 그렇기 때문에 상위 클래스의 생성자가 호출이 먼저 된다. - 클래스가 상속 받은 경우 하위클래스의 생성자에서는 반드시 상위 클래스의 생성자를 호출한다.
- 묵시적 생성자가 상위클래스에 존재하지 않을 경우 하위 클래스에서 명시적으로 생성자를 작성해주어야 한다.
- 항상 상위 클래스의 인스턴스가 먼저 생성되고, 하위 클래스의 인스턴스가 생성된다.
super( )
- 하위 클래스에서 갖는 상위 클래스의 값
=> 멤버 변수 접근이나, 메서드 등 접근 가능하다. - super( )은 상위 클래스의 기본 생성자를 호출한다.
- 하위 클래스에서 명시적으로 상위 클래스의 생성자를 호출하지 않으면 super( )가 자동으로 호출된다.
=> 상위 클래스에 생성자가 무조건 존재해야 한다. - 상위 클래스의 기본 생성자가 없는 경우 하위 클래스에서는 생성자는 super를 이용하여 명시적으로 상위 클래스의 생성자를 호출한다.
- super는 생성된 상위 클래스 인스턴스의 참조 값을 가지므로 super를 사용하여 상위 클래스의 멤버 변수나 메서드에 접근할 수 있다.
형 변환(업 캐스팅)
- 상위 클래스로 변수를 선언하고 하위 클래스의 생성자로 인스턴스를 생성가능
Customder customerKim = new VIPCustomer( );
=> Customer클래스는 VIPCustomer클래스의 상위 클래스이다.- 상위 클래스 타입의 변수에 하위 클래스 변수가 대입가능
VIPCustomer vipCustomer = new VIPCustomer( );
addCustomer(vipCustomer);
int addCustomer(Customer customer){
}- 하위 클래스는 상위 클래스의 타입을 내포하고 있으므로 상위 클래스로의 묵시적 형 변환이 가능하다.
- 상속 관계에서 모든 하위 클래스는 상위 클래스로 형 변환이 된다.
=> 그 역은 성립하지 않는다.
오버라이딩(Overriding)
- 하위 클래스에서 상위 클래스의 메서드를 재정의 할 경우 오버라이딩을 한다.
=> @Override - 상위 클래스에 정의된 메서드 구현 내용이 하위 클래스에서 구현할 메서드와 맞지 않는 경우 하위 클래스에서 동일한 이름을 갖는 메서드를 재정의 할 수 있다.
'Language > Java' 카테고리의 다른 글
[JAVA] 추상 클래스(abstract class) (0) 2021.06.06 [JAVA] 다형성(polymorphism)과 다운 캐스팅(downcasting) (0) 2021.06.05 [JAVA] ArrayList클래스 (0) 2021.06.03 [JAVA/디자인패턴] 싱글톤 패턴(singleton pattern) (0) 2021.06.03 [JAVA] static 변수와 메서드 (0) 2021.06.03