19.04.10 추상 클래스 / 메소드, 인터페이스
Back-End/Java 2019. 4. 10. 17:09-추상 클래스 및 메소드 특징-
자체적으로 객체를 생성할 수 없다.
상속을 통해 자식 클래스에서 인스턴스를 생성해야 한다.
추상클래스는 추상 메소드, 일반 메소드, 필드(멤버변수), 생성자로 구성된다.
추상클래스와 추상메소드는 클래스와 메소드 앞에 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
'Back-End > Java' 카테고리의 다른 글
19.04.14 객체 소멸자, 객체 비교, 동등 비교 등 (0) | 2019.04.14 |
---|---|
19.04.12 API, java.lang / java.util 패키지, 해시코드 (0) | 2019.04.12 |
19.04.09 상속, final (0) | 2019.04.09 |
19.04.08 어노테이션,Getter / Setter 메소드 (0) | 2019.04.08 |
19.04.06 Class(필드, 생성자 오버로딩) (0) | 2019.04.06 |