출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

class 자손클래스 extends 조상클래스/부모클래스

▶ 상속이란? 

- 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것.

- 두 클래스를 조상과 자손으로 관계를 맺어주는 것.

- 자손의 멤버개수는 조상보다 적을 수 없다.(같거나 많다.)

 

- 공통부분은 조상에서 관리하고 개별부분은 자손에서 관리한다.

- 조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다.

 

  • 여기서 중요한 사실은 하위클래스의 생성자 내에서 상위클래스의 생성자호출을 통해서 상위 클래스의 인스턴스 멤버를 초기화 한다는 점이다!
  • 하위 클래스의 생성자는 상위클래스의 인스턴스 변수를 초기화할 데이터까지  자로 전달받아야 한다!
  • 하위 클래스의 생성자는 상위 클래스의 생성자 호출을 통해서 상위 클래스의  스턴스 변수를 초기화한다!
  • 키워드 super는 상위 클래스의 생성자 호출에 사용된다. Super와 함께 표시된 전달되는 인자의 수와 자료형을 참조하여 호출할 생성자가 결정 된다!

Child2에서는 새로운 String 변수를 추가해줌 (name)

GrandChild에서는 부모클래스인 Child2의 변수 name을 사용하기 위해 super를 사용함.

여기서 super는 Child2를 의미한다.

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package Oct15;
 
public class CarMain {
 
    public static void main(String[] args) {
        
        //클래스멤버도 상속의 대상이다. 클래스 멤버는 한번만 생성/ 자손클래스의 이름으로도 참조, 호출이가능하다.
        System.out.println(Car.name);
        System.out.println(HybridCar.name);
        
        Car car1 = new Car(100);
        HybridCar car2 = new HybridCar(100,50);
        HybridWaterCar car3 = new HybridWaterCar(100,50,20);
 
        car3.showCurrentGauge();
    }
 
}
 
class Car {
    static String name="뽀카";
    int gasolinegauge;
    // car(){}
    
    Car(){
        
    }
    Car(int gasolinegauge){
        this.gasolinegauge=gasolinegauge;
    }
}
 
class HybridCar extends Car {
 
    int electronicGauge;
    /*
      HybridCar(){
       super();
        }
     */                              // Car(){}가 없다면 상위클래스 생성자에 필요한 것을 넣어줘야함
    
    HybridCar(int gasolinegauge, int electronicGauge){
        // 조상 클래스의 멤버를 초기화하는 생성자 호출
        // super(gasolinegauge);  // 조상클래스super는 꼭 첫줄에!
        super();
        // 새롭게 정의한 Hybrid 클래스의 멤버를 초기화해줌
        this.electronicGauge=electronicGauge;
        
    }
 
    
}
 
class HybridWaterCar extends HybridCar {
    /*
      
      HybridWaterCar()
      { super(); 
      }
     
     */
    HybridWaterCar(int gasolinegauge, int electronicGauge, int watergauge){
        super(gasolinegauge, electronicGauge);
        this.waterGauge=watergauge;
    }
    
    
    int waterGauge;
 
    public void showCurrentGauge() {
        System.out.println("잔여 가솔린 : " + gasolinegauge);
        System.out.println("잔여 전기 : " + electronicGauge);
        System.out.println("잔여 water : " + waterGauge);
    }
}
cs

'JAVA > basic' 카테고리의 다른 글

인터페이스 / interface / implements  (0) 2020.10.20
추상클래스 / abstract class  (0) 2020.10.20
오버라이딩 Override / Overriding & 다형성  (0) 2020.10.16
[Singleton] 싱글톤 / 싱글턴 패턴  (0) 2020.10.15
getter / setter  (0) 2020.10.15
접근제어 [ private / public / protected / default ]  (0) 2020.10.15
import  (0) 2020.10.15

+ Recent posts