상속(inheritance)
- 기존에 선언된 클래스의 필드를 다른 클래스에서 사용하고자 할 때
- 실제 필드를 전달하는 것이 아닌 관계를 정의하는 개념
- 클래스들을 만들다 보니 공통요소가 보여서 부모로 묶은 후 상속시켜 주어서 사용하고자 할 때
class A{
A의 필드
}
class B extends A{
B의 필드 + A의 필드
}
B obj = new B();
//obj 객체는 실제로는 A의 필드와 B의 필드를 둘 다 가진다.
A : 부모클래스/상위클래스, 슈퍼클래스/기반클래스
B : 자식클래스/하위클래스, 서브클래스/파생클래스
객체를 만들 때 클래스 사용 :
자식클래스의 생성자
생성자가 호출되었을 때
부모클래스의 필드가 먼저 생성되고, 자식클래스의 필드가 함께 복사되고, 객체는 그것을 가르킨다.
super()
- 부모클래스의 생성자를 호출
자식클래스 생성자 호출시 일어나는 일
- 자식 클래스의 객체는 자식 생성자를 호출하여 객체화 진행
- 메모리에 자식클래스의 필드만 올라갔다면, 자식 객체로 절대 부모클래스에 있는 필드들은 접근할 수 없다.
- 자식 생성자를 호출하게 되면, 자동으로 부모의 생성자가 먼저 호출이 된다.
- 자식의 필드가 부모의 필드에 붙어 필드가 완성이 된다.
- 자식 객체는 부모필드가 메모리에 먼저 생성되어 있기 때문에 부모의 필드들도 접근할 수 있게 된다.
- 자식 생성자 첫줄에는 항상 super클래스의 생성자가 호출된다.
- 명시적으로 적지 않을시에는 보이진 않지만 super(); 호출
class Car{
String brand;
String color;
int price;
public Car() {
//기본생성자
}
public Car(String brand, String color, int price) {
this.brand = brand;
this.color = color;
this.price = price;
}
void engineStart() {
System.out.println(brand+" 시동켜기");
}
void engineStop() {
System.out.println(brand+" 시동 끄기");
}
}
class SuperCar extends Car{
String pw;
public SuperCar() {
//super() 생략했을 경우, 보이지는 않지만, 부모클래스의 기본생성자 호출
super(); // 첫번째로 써줘야함, super : 부모클래스를 지칭(Car())
}
public SuperCar(String brand, String color, int price, String pw) {
super(brand, color, price); //명시적으로 부모의 클래스의 생성자를 호출
//pw는 부모의 필드가 아닌, 자식의 필드이기 때문에 직접 세팅
this.pw = pw;
}
void roofOpen() {
System.out.println(brand+ " 뚜껑 열기");
}
}
'Java > Java(base)' 카테고리의 다른 글
[Java] static (정적) : 모든 객체가 공유 (0) | 2021.11.29 |
---|---|
[Java] 다형성 Polymorphism : Overloading(오버로딩), Overriding(오버라이딩) (0) | 2021.11.29 |
[Java] 클래스의 개념, 선언, 사용, 생성자, this (0) | 2021.11.29 |
[Java] storage class(저장 기억 부류) : 변수 종류 //지역변수 전역변수 정적 변수 (0) | 2021.11.29 |
[Java] 메소드 Method (0) | 2021.11.29 |