Posted at

interfaceを実装したクラスでメソッドをオーバーライドする時

More than 5 years have passed since last update.

interfaceで定義したメソッドは暗黙でpublic abstractになるので、

オーバーライドしたメソッドには必ずpublicを付ける


Sample.java

interface Inter

{
void methodX(); // public abstract
}

class ImpleInter implements Inter
{
public void methodX() // public 付けないとダメ
{
System.out.println("ImpleInter");
}
}

class Sample
{
public static void main(String[] args)
{
Inter i = new ImpleInter(); // interface型の変数にオブジェクトの参照を代入
i.methodX();
}
}


じゃないと

Sample.java:8: ImpleInter の methodX() は Inter の methodX() を実装できません。スーパークラスでの定義 (public) より弱いアクセス特権を割り当てようとしました。

void methodX()
^
エラー 1 個

参照型の型変換

interface名 変数名 = インターフェースを実装したオブジェクト

Inter i = new ImpleInter(); // interface型の変数にオブジェクトの参照を代入

呼び出し側でインターフェースを実装したクラスがなくても、インターフェース型の変数を用意してメソッドを呼び出すことができる。