본문 바로가기
개발 수업/JAVA

[Java] 상속(inheritance)/클래스 상속

by 오늘 하루s 2023. 5. 16.
728x90
더보기

Day13-1. 230516

상속(inheritance)

부모클래스 = 상위클래스 = supper클래스

자식클래스 = 하위클래스 = 파생클래스 = sub클래스

→ 이미 잘 개발된 클래스를 재사용하기 때문에 중복되는 코드 줄여줌.

→ 유지 보수 편리성 제공, 객체 다형성 구현 가능

- 상속 대상 : 부모의 필드와 메소드

 

클래스 상속

class 자식클래스 extends 부모클래스{
 //필드
 //생성자
 //메소드
}

 

  • 상속 대상 제한

1. 여러 개의 부모 클래스를 상속할 수 없다.

2. 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외.

부모 클래스와 자식 클래스가 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메소드도 상속 대상에서 제외.

 

 

부모클래스 Machine01>

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
package chap0607;
 
import java.util.Date;
 
public class Machine01{
    //field
    String brand; //브랜드
    String color; //색상
  Date productionDay; //생산일 null로 초기화
    boolean power; //전원
    
    //constructor
    
    //method
    //전원키다
    void powerOn() {
        System.out.println("전원이 켜졌습니다.");
        power = true//!power
        //power = !power; 는 power를 반대로 바꿔줌.
        //return !power; 셋중에 하나->void를 boolean으로 바꿔줌.
    }
    
    //전원끄다
    void powerOff() {
        System.out.println("전원이 꺼졌습니다.");
        power = false;
    }
}
cs

 

 

자식클래스 1 Car05>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package chap0607;
 
public class Car05 extends Machine01{
    //Machine01클래스로부터 field, method를 상속받았다.
    //filed
    int currentSpeed=0//현재스피드
    static int maxSpeed=300//최대스피드=300
    
    //method
    //속도높이다
    void speedUP(int speed){
        currentSpeed += speed;
    }
    
    //속도낮추다
    void speedDown(int speed){
        currentSpeed -= speed;
    }
}
cs

부모 클래스의 필드와 메소드를 상속받고 다른 필드와 메소드를 추가함.

 

Car05Main 클래스>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package chap0607;
 
public class Car05Main {
    public static void main(String[] args) {
        Car05 myCar = new Car05();
        myCar.color = "red";
        System.out.println(myCar.brand);
        System.out.println(myCar.color);
        System.out.println(myCar.productionDay);
        System.out.println(myCar.power); //위에까지 상속받은 것
        System.out.println(myCar.currentSpeed);
        System.out.println(myCar.maxSpeed); //추가한 것
 
        myCar.powerOn();
        myCar.speedUP(50);
        System.out.println(myCar.currentSpeed);
        myCar.powerOff();
    }
}
cs
더보기

* 실행 결과

 

null
red
null
false
0
300
전원이 켜졌습니다.

50
전원이 꺼졌습니다.

 

 

자식클래스 2 Tv01>

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
package chap0607;
 
public class Tv01 extends Machine01 {
    //필드
    int vol; //볼륨
    String resolution="HD"//해상도
    
    //메소드
    //볼륨높이다()
    void volUp(int vol) {
        this.vol += vol; 
        showVol();
    }
    
    //볼륨낮추다()
    void volDown(int vol) {
        this.vol -= vol; 
        showVol();
    }
    
    //볼륨 출력
    void showVol(){    
        System.out.println("현재볼륨:"+vol);
    }
}
cs

 

Tv01Main클래스>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package chap0607;
 
public class Tv01Main {
    public static void main(String[] args) {
        Tv01 myTv = new Tv01();
        System.out.println(myTv.brand);
        System.out.println(myTv.color);
        System.out.println(myTv.productionDay);
        System.out.println(myTv.power); 
        System.out.println(myTv.resolution);
        
        myTv.powerOn();
        myTv.vol=10;
        System.out.println(myTv.vol);
        myTv.volUp(5);
        myTv.volDown(3);
        myTv.powerOff();
    }
}
cs
더보기

* 실행 결과

 

null
null
null
false
HD
전원이 켜졌습니다.
10
현재볼륨:15
현재볼륨:12
전원이 꺼졌습니다.

 

728x90