Interface(インタフェース)
クラスではないが、抽象クラスと同様、抽象メソッドを持っている。
オブジェクトはinterfaceのメソッドを具体化(OVERRIDE)することができる。
クラス宣言時、implementsとインターフェース名を入力する。
package ch08.sec02;
public interface RemoteControl {
//public 추상 메소드 선언
public void turnOn(); <- abstractはいらない。
}
package ch08.sec02;
public class Television implements RemoteControl{
@Override
public void turnOn() {
System.out.println("TV를 켭니다.");
}
}
このTelevisionというクラスは、RemoteControlというクラスを具現し、
Televisionのインスタンスは具現(implement)したオブジェクトになる。
package ch08.sec02;
public class RemoteControlExample {
public static void main(String[] args) {
RemoteControl rc;
rc = new Television();
rc.turnOn();
}
}
TV를 켭니다. <- Television의 turnOn 실행
また、同じインタフェースをimplementする場合、継承をせずにInterfaceの変数を通して、他のクラスのメソッドを呼び出すことができる。
package ch08.sec02;
public class Audio implements RemoteControl{
@Override
public void turnOn() {
System.out.println("Audio를 켭니다.");
}
}
package ch08.sec02;
public class RemoteControlExample {
public static void main(String[] args) {
RemoteControl rc;
rc = new Television();
rc.turnOn();
rc = new Audio();
rc.turnOn();
}
}
Constant Field
Interfaceのフィールドは、すべてpublic static finalだ。記入をしなくても自動的にコンパイルの過程の中で変換される。
package ch08.sec03;
public interface RemoteControl {
int MAX_VALUE = 10;
int MIN_VALUE = 0;
}
package ch08.sec03;
public class RemoteControlExample implements RemoteControl{
public static void main(String[] args) {
System.out.println(MAX_VALUE); //10
System.out.println(MIN_VALUE); //0
}
}
定数であり、インタフェースに属しているため、インスタンス化せず、フィールドにアクセルすることができる。
抽象メソッド
インタフェースのメソッドはpublic abstactを入力しなくても、自動的に抽象クラスに変換される。
抽象クラスとの違いでもある。
また、publicであるため、implementしたクラスもpublic以外のアクセル修飾子ではオーバーライドはできない。
package ch08.sec04;
public interface RemoteControl {
//상수 필드
int MAX_VOLUME = 10;
int MIN_VOLUME = 0;
//추상 메소드
void turnOn();
void turnOff();
void setVolume(int volume);
}
package ch08.sec04;
public class Television implements RemoteControl{
//필드
private int volume;
@Override
public void turnOn() {
System.out.println("TV를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("TV를 끕니다");
}
@Override
public void setVolume(int volume) {
if(volume > MAX_VOLUME) {
this.volume = RemoteControl.MAX_VOLUME;
}
else if(volume < MIN_VOLUME) {
this.volume = RemoteControl.MIN_VOLUME;
}
else {
this.volume = volume;
}
System.out.println("현재 TV 볼륨:" + this.volume);
}
}
package ch08.sec04;
public class Audio implements RemoteControl {
//필드
private int volume;
//추상 메소드 오버라이딩
@Override
public void turnOn() {
System.out.println("Audio를 켭니다");
}
@Override
public void turnOff() {
System.out.println("Audio를 끕니다");
}
@Override
public void setVolume(int volume) {
if(volume > MAX_VOLUME) {
this.volume = RemoteControl.MAX_VOLUME;
}
else if(volume < MIN_VOLUME) {
this.volume = RemoteControl.MIN_VOLUME;
}
else {
this.volume = volume;
}
System.out.println("현재 Audio 불륨: " + this.volume);
}
}
package ch08.sec04;
public class RemoteControlExample {
public static void main(String[] args) {
//인터페이스 변수 선언
RemoteControl rc;
//Television 객체를 생성하고 인터페이스 변수에 대입
rc = new Television();
rc.turnOn();
rc.turnOff();
rc.setVolume(10);
System.out.println();
//Audio 객체를 생성하고 인터페이스 변수에 대입
rc = new Audio();
rc.turnOn();
rc.turnOff();
rc.setVolume(10);
}
}
Coding Test
<文字列strをn回反復> Stringのメソッド
String str = "random";
int n = 5;
String answer = str.repeat(int n)
System.out.println(str.repeat(5));
<文字列を配列に変換> Stringのメソッド
String str = "random";
ex>
for( char ch : str.toCharArray()) {
System.out.println(ch);
}
<大文字⇔小文字> Characterのメソッド
Character.toUpperCase(char c)
Character.toLowerCase(char c)
<Escape>
\\ ➡ \
\' ➡ '
\" ➡ "
\"愛してる\" ➡ "愛してる”
'IT自主学習 (2023.05.23~) > Java(2023.05.23~)' 카테고리의 다른 글
プログラミング自主学習 48日目 全体復習/Coding Test (0) | 2023.07.13 |
---|---|
プログラミング自主学習 46日目 instanceof /抽象クラス(abstract)/sealed(JAVA 15) (0) | 2023.07.11 |
プログラミング自主学習 45日目 Class確認問題/継承(Inheritance)/protected/タイプ変換/多態性(ポリモーフィズム・Polymorphism) (0) | 2023.07.10 |
プログラミング自主学習 44日目 全体復習/アクセス修飾子/Getter・Setter/Singletone (0) | 2023.07.09 |
プログラミング自主学習 43日目 final・constant/package・import (0) | 2023.07.08 |