본문 바로가기

IT自主学習 (2023.05.23~)/Java(2023.05.23~)

プログラミング自主学習 47日目 Interface/Coding Test

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();

 

}

}

 

 

https://wildeveloperetrain.tistory.com/112

 

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>
\\  ➡ \
\'  ➡ '
\"    ➡ "
\"愛してる\"  ➡ "愛してる”