상속이란
새로 확장된 클래스가 기존 클래스의 멤버를 물려받는 것을 상속이라고 합니다.
상솓받은 클래스는 기존 클래스의 멤버를 물려받아 동작하게끔 되어 있습니다.
상속을 사용하는 이유
서브클래스에서는 상속받은 멤버와 추가된 멤버를 모두 같은 방법으로 호출할 수 있습니다.
이해가 안되시는 분들은 아래의 예제 코드를 참고해 주세요.
이처럼 클래스를 확장하면 이미 설계된 클래스를 바탕으로 새로운 클래스를 보다 효율적으로 만들 수 있어
결과적으로 전체 프로그램의 작성 능률을 높일 수 있습니다.
예
자동차의 기능을 정의하는 클래스가 있습니다.
이 때 특수한 자동차인 경주용 차의 클래스를 생성하려고 합니다.
경주용 차는 자동차의 일종이므로 많은 공통점을 가지고 있습니다.
따라서 자동차 클래스를 바탕으로 경주용 차 클래스를 만들 수 있습니다.
이를 코드로 나타내면 다음과 같습니다.
class Car { }
class RacingCar extends Car { }
슈퍼클래스와 서브클래스
위 예에서 경주용 차 클래스는 자동차 클래스를 상속받습니다.
이렇게 기본바탕이 되는 클래스는 슈퍼클래스, 새로운 클래스는 서브클래스 라고 부릅니다.
'자동차' 클래스 -> 슈퍼클래스
'경주용 차' 클래스 -> 서브클래스
즉, 슈퍼클래스를 확장해서 서브클래스를 선언할 수 있고
서브클래스는 슈퍼클래스의 멤버를 상속받을 수 있습니다.
슈퍼클래스와 서브클래스의 생성자가 호출되는 순서
서브클래스의 객체가 생성될 때 슈퍼클래스의 생성자가 먼저 실행되게 됩니다.
이 후 서브클래스의 생성자가 실행되게 됩니다.
생성자가 여러개인 경우 호출되는 방법은 다음 포스팅에서 다루겠습니다.
예제 코드
클래스 객체를 생성할 때 RacingCar 서브클래스만 생성하였습니다.
RacingCar 서브클래스는 Car 슈퍼클래스를 상속하기 때문에, Car 클래스 객체를 생성하지 않고도
Car 의 멤버나 메소드를 사용할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
public class extendsTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
RacingCar rc = new RacingCar();
rc.setCar(1, "12가 3456");
rc.setSpeed(300);
System.out.println( rc.getNum() );
System.out.println( rc.getcarNumber() );
System.out.println( rc.getSpeed() );
}
}
class Car {
private int num;
private String carNumber;
public Car() {
this.num = 0;
this.carNumber = "";
System.out.println("자동차가 생성되었습니다.");
}
public void setCar (int num, String carNumber) {
this.num = num;
this.carNumber = carNumber;
}
public int getNum() {
return this.num;
}
public String getcarNumber() {
return this.carNumber;
}
}
class RacingCar extends Car {
private int max_speed;
public RacingCar() {
this.max_speed = 0;
System.out.println("경주용차가 생성되었습니다.");
}
public void setSpeed (int max_speed) {
this.max_speed = max_speed;
}
public int getSpeed () {
return this.max_speed;
}
}
|
cs |
자바 상속이란
자바 상속 사용방법
자바 상속을 사용하는 이유
자바 슈퍼클래스와 서브클래스
'Computer Language > JAVA' 카테고리의 다른 글
[JAVA] this() 와 super() 의 차이점 (0) | 2020.12.13 |
---|---|
[JAVA] 슈퍼클래스의 생성자 오버로딩을 서브클래스에서 호출하는 방법 (0) | 2020.12.13 |
[JAVA] 자바 Math 클래스를 사용하는 방법 (0) | 2020.12.12 |
[JAVA] 문자를 숫자로, 숫자를 문자로 변환하는 방법 toString, parseInt (0) | 2020.12.12 |
[JAVA] 문자열을 역순으로 출력하는 방법 reverse (0) | 2020.12.12 |