반응형
상속(Inheritance) 이란?
- 객체지향 프로그램에서 부모클래스(상위클래스)의 변수(필드)나 메소드(함수)를 자식클래스(하위클래스)가 물려받아 자식클래스가 자신의 것처럼 사용할 수 있게하는 것
- 상속을 하면 코드의 중복을 감소할 수 있고, 유지보수 시간을 단축할 수 있다는 장점이 있음
super란?
- 클래스에서 this를 사용하면 자기 자신의 변수라는 것을 표현했었음
- super은 부모를 가르킴
상속 예제
Car class
- 아래와 같이 Car class가 있고 모든 Car들이 기본적으로 가지고 있는 변수, 메소드라고 가정
class Car {
int number;
String brand;
Car(int number, String brand) {
this.number = number;
this.brand = brand;
}
String basicCarInfo() {
return "번호 : " + number + " 브랜드 : " + brand;
}
}
ACar class
- A 브랜드에서 만든 차들은 ACar class로 객체 생성을 하는 상황
- A 브랜드의 최대 속력은 모두 200으로 일치한다고 가정
class ACar extends Car{
int maxSpeed = 200;
ACar(int number) {
super(number, "A Brand");
}
void printCarInfo() {
System.out.println(super.basicCarInfo() + " 최대 스피드 : " + this.maxSpeed);
System.out.println(super.brand + " " + number);
}
}
// ACar 객체 생성 및 사용
ACar a = new ACar(1234);
a.printCarInfo();
/* 출력
번호 : 1234 브랜드 : A Brand 최대 스피드 : 200
A Brand 1234 */
- 위와 같이 생성하면 ACar을 생성할 때 번호만 넘겨주면 자동으로 "A Brand"를 넣어줌
- 이 때 super() 생성자를 사용하는데, 이는 부모클래스의 생성자를 뜻함 ( Car 생성자 )
- 또한 super.메소드, super.변수를 사용해서 부모 객체의 메소드, 변수에 직접 접근 할 수도 있음
- super.변수를 사용할 때, super없이 사용해도 됨
BCar class
- B 브랜드에서 만든 차들은 BCar class로 객체 생성을 하는 상황
- B 브랜드의 최대 속력은 모두 달라서 따로 입력을 받아줌
- A 브랜드와는 달리 옵션을 추가 할 수도 있음
class BCar extends Car{
int maxSpeed;
boolean option;
BCar(int number, int maxSpeed, boolean option) {
super(number, "B Brand");
this.maxSpeed = maxSpeed;
this.option = option;
}
void printCarInfo() {
System.out.println(super.basicCarInfo() +
" 최대 스피드 : " + this.maxSpeed + " 옵션 추가 : " + this.option);
}
}
// BCar 객체 생성 및 사용
BCar b = new BCar(5678, 240, true);
b.printCarInfo();
/* 출력
번호 : 5678 브랜드 : B Brand 최대 스피드 : 240 옵션 추가 : true */
- super 생성자를 통해 부모에 존재하는 number, brand 값을 넣어주고, BCar 고유 인스턴스인 maxSpeed, option은 자기 자신의 변수들에 넣어줌
반응형
'JAVA > 기본 문법' 카테고리의 다른 글
[JAVA] 컬렉션 프레임워크 (Collection Framework) (0) | 2022.04.12 |
---|---|
[JAVA] Overloading, Overriding (0) | 2022.03.31 |
[JAVA] 접근 제한자, 정보은닉, Static, psvm (0) | 2021.08.17 |
[JAVA] 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy) (0) | 2021.08.16 |
[JAVA] 클래스와 객체 (+ 생성자, this, 객체 배열 사용법) (0) | 2021.08.16 |