JAVA/java 이론

[자바JAVA] 메서드 오버라이딩

자바칩 프라푸치노 2020. 10. 19. 15:50

1. 오버라이딩(재정의)

조상클래스로부터 상속받은 메서드의 내용을 상속 받는 클래스에 맞게 변경하는 것

 

2. 오버라이딩의 조건

메서드의 선언부가 같아야한다.

접근 제어자를 좁은 범위로 변경할 수 없다.

조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

 

3. 오버로딩 VS 오버라이딩

오버로딩 - 기존에 없던 메서드를 새로 정의하는 것 new

오버라이딩 - 상속받은 메서드의 구현부를 바꾸는 것 modify

 

(예제)

<조상클래스>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package sec01_exam;
//조상클래스
public class HddDisk {
    //멤버변수
    int capacity;//용량
    int rpm;//속도
    //생성자
    public HddDisk() {
        
    }
    //생성자
    public HddDisk(int capacity, int rpm) {
        super();
        this.capacity = capacity;
        this.rpm = rpm;
    }
    //메서드
    public String Status() {
        return "하드디스크의 용량은 " + this.capacity + "GB이며, " + 
                "RPM은 " + this.rpm + "입니다.";
    }
    
}
 
cs

<자손클래스>

조상클래스의 Status 메서드를 오버라이딩함

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package sec01_exam;
//자손클래스
public class UsbMemory extends HddDisk{
 
    int capacity;
    int rpm;
    
    public UsbMemory(int capacity, int rpm) {
        super(1050);
        this.capacity = capacity;
        this.rpm = rpm;
    }
    
    @Override
    public String Status() {
        return "USB메모리  용량은 " + super.capacity + "GB이며, " + 
                "RPM은 " + super.rpm + "입니다.";
    }
    
    
}
 
cs

<실행클래스>

조상의 Status 메서드를 호출하면 당연히 조상의 메서드가 호출되고 

자손 객체를 만들어 Status메서들를 호출하면 자손의 메서드가 호출됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package sec01_exam;
 
public class DiskEx {
 
    public static void main(String[] args) {
    
        HddDisk hddDisk = new HddDisk(500,7200);
        UsbMemory usbMemory = new UsbMemory(32520);
        
        String str = hddDisk.Status();
        System.out.println(str);
        
        str = usbMemory.Status();
        System.out.println(str);
 
    }
 
}
 
cs

 

<실행결과>

728x90