自問
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^)\