-
[Java] 상속 개념과 사용법 그리고 super() 문으로 부모 인스턴스 초기화하는 방법IT/개발(자바, 서블릿, 스프링 등) 2019. 12. 9. 22:19
클래스에서 필드와 메서드의 중복을 제거하는 방법? 상속을 이용한다.
중복 제거 조건 1. 클래스 간의 공통 멤버를 가지는가?
중복 제거 조건 2. is a 관계가 성립하는가?
위 두가지 조건에 만족하면, 각 클래스의 중복을 제거할 수 있다.
(예시)
제거 조건 1. 사람이라는 공통점 존재.
제거 조건 2. is a 관계 성립. Employee is a Person, Professor is a Person, Student is a Person.
위 두가지 조건 만족하기 때문에 아래의 상속관계가 가능하다.
Employee extends Person
Professor extends Person
Student extends Person
Employee, Professor, Student 인스턴스가 생성될 때 부모 클래스의 생성자도 함께 호출된다. 어떤 클래스를 상속받은 클래스는 컴파일러가 소스 파일을 컴파일할 때 super() 문을 자동으로 생성한다. super()문은 상속받은 클래스의 모든 생성자 첫 번째 줄에 자동으로 추가된다. 생성자 내에 super()문을 사용하지 않았을 때만 자동으로 추가된다. this()는 자신의 다른 생성자를 호출할 때 사용한다. super()문은 부모 생성자를 호출할 때 사용한다.
생성자에 대해서 정리하자면 이렇다.
- 모든 클래스는 생성자가 반드시 존재한다. 개발자가 명시하지 않으면 컴파일러가 디폴트 생성자를 생성한다.
- 자식 클래스의 모든 생성자에는 첫 번째 줄에 super() 문이 자동으로 추가된다. 단, 생성자에 super()문을 사용하지 않았을 때만 자동으로 추가된다.
- 따라서 자식 클래스의 인스턴스를 생성할 때 부모 클래스의 생성자도 함께 호출된다.
super() 문을 이용한 부모 생성자의 활용 예제
Person.java public class Person { private String name; private int age; public Person(){ System.out.println("Person 생성자"); } public Person(String name, int age) { this.name = name; this. age = age; } }
Employee.java public class Employee extends Person { private String dept; public Employee(){ super(); System.out.println("Employee 생성자"); } public Employee(String name, int age, String dept) { super(name, age); this.dept = dept; } }
'IT > 개발(자바, 서블릿, 스프링 등)' 카테고리의 다른 글
[Java] 추상 메서드와 추상 클래스 개념(abstract) (0) 2019.12.10 [Java] final 키워드 개념 정리 (0) 2019.12.09 [Java] this 키워드로 생성자 호출 (0) 2019.12.09 [Java] 정적 멤버 개념 (static 키워드 개념) (0) 2019.12.09 [Java] 자바의 메모리 구조 정리 (0) 2019.12.07