💡
プログラミング自主学習 DAY52 Interface/Coding Test
Interface
default method
抽象クラス以外も、インスタンス生成時に活用できるdefault methodがある。
setMuteというdefaultメソッドがあると仮定する。
RemoteControl
public interface RemoteControl {
int MAX_VOLUME = 10;
int MIN_VOLUME = 0;
void turnOn();
void turnOff();
void setVolume(int volume);
//default method
default void setMute(boolean mute) {
if(mute) {
System.out.println("muteします。");
setVolume(MIN_VOLUME);
}else {
System.out.println("muteを解除します。");
}
}//method block
RemoteControlExample
public class RemoteControlExample {
public static void main(String[] args) {
RemoteControl rc;
rc = new Television();
rc.turnOn();
rc.setVolume(5);
rc.setMute(true);
rc.setMute(false);
}
}
<result>
muteします。
現在のTVヴォリューム:0
muteを解除します。
Audio
private int memoryVolume;
@Override
public void setMute(boolean mute){
if(mute) {
this.memoryVolume = this.volume;
System.out.println("muteします。");
setVolume(RemoteControl.MIN_VOLUME);
}else {
System.out.println("muteを解除します。"。);
setVolume(this.memoryVolume);
}
static method
static void changeBattery(){
System.out.println("電池を交換します。")
}
private method
abstarct method
、default method
、static method
は、基本的にpublic
のアクセス接近修飾子を持っている。
例えば、default method
a()とb()が100以上の長いコードで、一行目のみ違うメソッドだとする。その場合、重なるコードが多いため、無駄が多くなるが、その際にprivate methodに重複コードを移すことができる。
コンストラクタの場合、this(parameter);を使用して、無駄なコードを減らすことがあったが、似ている原理だ。
InterfaceService
public interface Service {
//default method
default void defaultMethod1() {
System.out.println("defaultMethod1");
defaultCommon();
}
default void defaultMethod2() {
System.out.println("defaultMethod2");
defaultCommon();
}
//private method
private void defaultCommon() {
System.out.println("defaultMethod1SameCode");
System.out.println("defaultMethod2SameCode");
}
//default method
static void defaultStaticMethod1() {
System.out.println("defaultStaticMethod1");
defaultStaticCommon();
}
static void defaultStaticMethod2() {
System.out.println("defaultStaticMethod2");
defaultStaticCommon();
}
//private method
private static void defaultStaticCommon() {
System.out.println("defaultStaticMethod1SameCode");
System.out.println("defaultStaticMethod2SameCode");
}
}
ServiceImp
public class ServiceIml implements Service{
}
ServiceExample
public class ServiceExample {
public static void main(String[] args) {
//declare interface variable and input object address
Service service = new ServiceIml();
//call default method
service.defaultMethod1();
System.out.println();
service.defaultMethod2();
System.out.println();
//call static method
Service.defaultStaticMethod1();
System.out.println();
Service.defaultStaticMethod2();
System.out.println();
}
}
defaultMethod1
defaultMethod1SameCode
defaultMethod2SameCode
defaultMethod2
defaultMethod1SameCode
defaultMethod2SameCode
defaultStaticMethod1
defaultStaticMethod1SameCode
defaultStaticMethod2SameCode
defaultStaticMethod2
defaultStaticMethod1SameCode
defaultStaticMethod2SameCode
Coding Test
接頭辞:String.startWith();
startWith
String banana = "banana";
String ba = "ba";
String an = "an";
String bananas ="bananas";
System.out.println(banana.startWith(ba));
System.out.println(banana.startWith(an));
System.out.println(banana.startWith(bananas));
true
false
false
配列の要素ほど追加
Array
class Solution {
public int[] solution(int[] arr) {
int size = 0;
for(int a: arr){size += a;}
int[] answer = new int[size];
int count = 0;
for(int i=0; i< arr.length; i++){
for(int j=0; j<arr[i]; j++){
answer[count] = arr[i];
count++;
}
}
return answer;
}
}
Discussion