상속
- 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다.
- 상속을 이용하면 기존 클래스의 모든 필드와 메소드를 물려받아, 새로운 클래스를 생성할 수 있다.
- 기존 클래스를 부모 클래스(parent class)라고 하며,
- 상속을 통해 새롭게 작성되는 클래스를 자식 클래스(child class)라고 한다.
class 자식클래스이름 extend 부모님클래스 이름 {...}
위 사진을 보면 부모클래스는 자식클래스에 포함돼있다.
자식클래스에는 부모클래스의 필드와 메소드만이 상속되며, 생성자와 초기화 블록은 상속되지 않는다.
아래 코드를 통해 필드, 메소드 상속과 생성자에 대하여 알아보자.
class Parent {
private int a = 100;
public int b = 200;
int c = 300;
Parent() {
System.out.println("부모클래스 생성자 호출");
}
}
class Child extends Parent {
int d = 400;
Child() {
System.out.println("자식클래스 생성자 호출");
}
void print() {
// 부모+자식클래스 필드 사용
// System.out.println(a); private이므로 에러 발생
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
public class Main {
public static void main(String[] args) {
Child ch = new Child();
ch.print();
// 부모클래스 생성자 호출 => 부모 객체 먼저 생성 후, 자식 객체가 생성이 된다.
// 자식클래스 생성자 호출 => 생성자는 상속받지 않는다.
// 200
// 300
// 400
}
}
부모클래스 생성자에 매개변수가 있으면 어쩌나?
- 결론적으로 자식클래스를 인스턴스화할 때 부모생성자를 자동으로 호출할 수 없으며 에러가난다.
- super()를 사용하면 부모생성자 호출이 가능하다.
class Parent {
Parent(String str) {
System.out.println("super()로 " + str + " 생성자 호출");
}
}
class Child extends Parent {
int d = 400;
Child() {
super("부모클래스");
System.out.println("자식클래스 생성자 호출");
}
}
public class Main {
public static void main(String[] args) {
Child ch = new Child();
// super()로 부모클래스 생성자 호출
// 자식클래스 생성자 호출
}
}
super()에 대한 글은 따로 자세히 쓸 거다.
일단 대충 어떻게 쓰는진 알 거 같다.
Object 클래스
- 쉽게 말하면 모든 클래스의 부모 클래스가 되는 클래스이다.
- 즉, 자바의 모든 클래스는 extends키워드 사용 없이 Object클래스의 모든 필드와 메소드를 상속받게 된다.
- toString(), clone()과 같은 메소드를 바로 사용할 수 있는 이유는 해당 메소드들이 Object클래스의 메소드이기 때문이다.
'Java' 카테고리의 다른 글
[Java] 오버로딩 & 오버라이딩 (0) | 2022.09.10 |
---|---|
[Java] 클래스 상속관계와 포함관계 차이 (0) | 2022.09.09 |
[Java] 접근 제어자 (0) | 2022.09.08 |
[Java] JVM 구조 (0) | 2022.09.08 |
[Java] 클래스 메서드와 인스턴스 메서드 (0) | 2022.09.07 |