自問
Javaでクラスの多重継承を行う方法を教えてください。
ベストアンサー
Javaで多重継承はサポートされない。
public static class H {
String h = "hour";
void echo(){
System.out.println(h);
}
}
public static class O {
String o = "o'clock";
void echo(){
System.out.println(o);
}
}
public static class HO extends H, O{ //Compile error!
void echo(){
H.super.echo(); //Compile error!
O.super.echo(); //Compile error!
}
}
だが、interfaceを多数実装することはできる。
public interface H {
String h = "hour"; //Unwritten "public static final "
void echo(); //Unwritten "public"
}
public interface O {
String o = "o'clock"; //Unwritten "public static final"
void echo(); //Unwritten "public"
}
public static class HO implements H, O{ //Success
public void echo(){
System.out.println(h);
System.out.println(o);
//H.super.echo(); Compile error. Undefined method.
//O.super.echo(); Compile error. Undefined method.
//echo(); Too bad!!!! Infinity Recursion! 無限ループ!
}
}
また、Java 8からinterface内でdefaultメソッドとstaticメソッドが使えるようになった。
public interface H {
String h = "hour"; //Unwritten "public static final "
default void echo(){ //Overridable public instance method
staticEcho();
}
static void staticEcho(){ //Unwritten "public static final"
System.out.println(h);
}
}
public interface O {
String o = "o'clock"; //Unwritten "public static final"
default void echo(){ //Overridable public instance method
staticEcho();
}
static void staticEcho(){ //Unwritten "public static final"
System.out.println(o);
}
}
public static class HO implements H, O{ //Success
public void echo(){
H.super.echo(); //Call default method
//H.staticEcho(); //Call static method
O.super.echo(); //Call default method
//O.staticEcho(); //Call static method
}
}
オチ
interfaceでdefaultメソッドとstaticメソッド使えるの今日知った/(^o^)\
雰囲気でコード書いてて全く気付かなかった/(^o^)\
Java勉強しなおしてくる/(^o^)\