365連休

にわかのandroidとかの開発メモ。

【Self Stack Overflow】Javaで多重継承を行う方法

自問

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