19.04.10 추상 클래스 / 메소드, 인터페이스

Back-End/Java 2019. 4. 10. 17:09
728x90
반응형

-추상 클래스 및 메소드 특징-


자체적으로 객체를 생성할 수 없다.
상속을 통해 자식 클래스에서 인스턴스를 생성해야 한다.
추상클래스는 추상 메소드, 일반 메소드, 필드(멤버변수), 생성자로 구성된다.
추상클래스와 추상메소드는 클래스와 메소드 앞에 abstract 키워드를 추가하면 된다.

 

-인터페이스-

 

추상클래스보다 더 추상도가 깊은 개념
필드는 모두 상수로 선언해야 한다.
메서드는 모두 추상메서드로 선언해야 한다.
추상클래스와 다른점은 다중상속이 가능하다는 점이다.

 

-인터페이스 식-

 

public interface 인터페이스_이름

{

필드(타입 상수명 = 값)

메소드( 추상, 디폴트, 정적 )

}

 

- 예제 및 출력 결과 -

 

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
package com.hs.chap8;
 
public interface RemoteControl {
    // 상수 필드
    public int MAX_VOLUME = 10;
    public int MIN_VOLUME = 0;
 
    // 추상 메소드
    public void turnOn();
 
    public void turnOff(); // 메소드 선언부만 설정
 
    public void setVolume(int volume);
 
    // 디폴트 메소드
    default void setMute(boolean mute) {
        if (mute) {
            System.out.println("무음 처리합니다.");
        } else {
            System.out.println("무음 해제합니다.");
        }
    }
 
    // 정적 메소드
    static void changeBattery() {
        System.out.println("건전지를 교환합니다.");
    }
}
 
cs

 

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
package com.hs.chap8;
 
public class Audio implements RemoteControl {
 
    // 필드
    private int volume;
 
    // turnOn() 추상 메소드의 실체 메소드
    public void turnOn() {
        System.out.println("Audio를 켭니다.");
    }
 
    // turnOff() 추상 메소드의 실체 메소드
    public void turnOff() {
        System.out.println("Audio를 끕니다.");
    }
 
    // setVolume() 추상 메소드의 실체 메소드
    public void setVolume(int volume) {
        if (volume > RemoteControl.MAX_VOLUME) {
            this.volume = RemoteControl.MAX_VOLUME;
        } else if (volume < RemoteControl.MIN_VOLUME) {
            this.volume = RemoteControl.MIN_VOLUME;
        } else {
            this.volume = volume;
        }
        System.out.println("현재 Audio 볼륨:" + this.volume);
    }
}
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.hs.chap8;
 
public class RemoteControlExample {
    public static void main(String[] args) {
 
        RemoteControl rc = null;
 
        rc = new Television();
        rc.turnOn();
        rc.turnOff();
 
        rc = new Audio();
        rc.turnOn();
        rc.turnOff();
    }
}
 
cs

 

1
2
3
4
5
6
package com.hs.chap8;
 
public interface Searchable {
    void search(String url);
}
 
cs

 

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
package com.hs.chap8;
 
public class SmartTelevision implements RemoteControl, Searchable {
    private int volume;
 
    public void turnOn() {
        System.out.println("TV를 켭니다.");
    }
 
    public void turnOff() {
        System.out.println("TV를 끕니다.");
    }
 
    public void setVolume(int volume) {
        if (volume > RemoteControl.MAX_VOLUME) {
            this.volume = RemoteControl.MAX_VOLUME;
        } else if (volume < RemoteControl.MIN_VOLUME) {
            this.volume = RemoteControl.MIN_VOLUME;
        } else {
            this.volume = volume;
        }
        System.out.println("현재 TV 볼륨: " + this.volume);
    }
 
    public void search(String url) {
        System.out.println(url + " 을 검색합니다.");
    }
}
 
cs

 

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
package com.hs.chap8;
 
public class Television implements RemoteControl {
 
    // 필드
    private int volume;
 
    // turnOn() 추상 메소드의 실체 메소드
    public void turnOn() {
        System.out.println("TV를 켭니다.");
    }
 
    // turnOff() 추상 메소드의 실체 메소드
    public void turnOff() {
        System.out.println("TV를 끕니다.");
    }
 
    // setVolume() 추상 메소드의 실체 메소드
    public void setVolume(int volume) {
        if (volume > RemoteControl.MAX_VOLUME) {
            this.volume = RemoteControl.MAX_VOLUME;
        } else if (volume < RemoteControl.MIN_VOLUME) {
            this.volume = RemoteControl.MIN_VOLUME;
        } else {
            this.volume = volume;
        }
        System.out.println("현재 TV 볼륨: " + this.volume);
    }
}
 
cs

 

 

-출처-


-동영상 강의-
https://www.youtube.com/watch?v=XkSWgIQ2zkk

 

728x90
반응형
: