CS/JAVA

자바 - 상속

reko_ 2022. 4. 10. 23:32

상속

 

부모 클래스에 만들어진 필드, 메소드를 자식 클래스가 물려받음

 

 

동일한 특성을 재정의할 필요가 없어 자식클래스가 간결해짐

 

 

 

 

상속 선언

 

• 부모 클래스 : 슈퍼 클래스(super class)

• 자식 클래스 : 서브 클래스(sub class)

• extends 키워드 사용

public class Person {
	...
}
public class Student extends Person { // Person을 상속받는 클래스 Student 선언
	...
}
public class StudentWorker extends Student { // Student를 상속받는 StudentWorker 선언
	...
}

 

Student 클래스는 자신과 Person 클래스의 protected , public, default, 필드에 접근할 수 있고,

StudentWorker 클래스는 자신과 Person 클래스, Student 클래스의 protected, public, default 필드에 접근할 수 있다.

 

슈퍼클래스와 서브클래스가 다른 패키지에 존재한다면 protected, public 필드만 접근 가능하다.

 

 

최상위 클래스

 

부모 클래스는 동시에 여러개의 자식 클래스에 상속 시킬 수 있고,

자식클래스는 한번에 한개의 부모 클래스만 상속 받을 수 있다.

 

 

상속의 최상의 조상 클래스는 java.lang.Object 클래스이다.

 

자바 컴파일러에 의해 모든 클래스는 java.lang.Object를 상속 받는다.

 

11개의 메소드가 존재하고 모든 클래스에서 활용할 수 있다. ex) equals(), clone()

 

 

 

 

 

서브 클래스/슈퍼 클래스의 생성자 호출 및 실행

 

서브 클래스의 생성자는 실행되기 전에 늘 슈퍼 클래스의 생성자를 먼저 실행한다.

 

호출 순서

- 서브 클래스 생성자 -> 슈퍼 클래스 생성자

 

실행 순서

- 슈퍼 클래스 생성자 -> 서브 클래스 생성자

 

 

 

 

부모 클래스에 생성자가 여러개 존재한다면, 자식 클래스의 생성자에서 super() 메소드로 부모 클래스의 생성자 중 어떤 생성자를 실행시킬 것인지 선택해야 한다. 명시하지 않는 경우 기본 생성자를 선택한다.

 

this() - 자기 자신의 다른 생성자

super() - 부모 클래스의 생성자

 

super()에 들어가는 인자를 바꿔서 생성자를 선택할 수 있다.

 

 

만약 자식 클래스로 객체를 생성할 때 인자를 주고, 그 인자에 맞는 부모 클래스의 생성자를 호출하려면 자식 클래스의 생성자에서도 super()에 똑같은 인자를 넘겨주어야 한다. 아니면 부모 클래스에서 기본 생성자를 호출한다. 

 

 

super()에 인자를 넣어주어야 같은 타입의 부모 생성자를 호출할 수 있다.

 

 

 

만약 B(int x) 생성자가 없다면 컴파일 오류