JAvaマルチ継承

7039 ワード

オブジェクト向けの3つのプロパティ:カプセル化、継承、マルチステート.
マルチ継承のまとめ:javaのクラスではマルチ継承は許可されていません.すなわち、サブクラスは単一の親クラスしか継承できませんが、複数のインタフェースインタフェースを実装することでマルチ継承が可能になります.すなわち、1つのインタフェースで複数のインタフェースを継承することができます.原則:a.クラスはインタフェースより優れている.サブクラスが継承する親と実装のインタフェースに同じ方法がある場合.では、子クラスが親クラスを継承する方法b.子タイプの方法は、親タイプの方法よりも優先される.
クラス継承サブクラスは、単一の親のみを継承(extends)できるため、マルチ継承は存在しません.
インタフェース継承例:1.インタフェースは複数の親インタフェースを継承します
注:複数の親インタフェースのメソッド署名が同じでパラメータが異なる場合、複数の親インタフェースのデフォルトメソッドが異なり、複数の親インタフェースのデフォルトメソッドが暗黙的に継承されますが、戻り値が異なり、メソッドが同じです.
インタフェース1
/**
 * @Description:     
 * @author:Dxh 
 * @date:2018 1 4  
 */
public interface AnamalService {

    void say();

}

インタフェース2
/**
 * @Description:     
 * @author:Dxh 
 * @date:2018 1 4  
 */
public interface PersonService {

    void say();

    void spell();
}

インタフェース3、継承インタフェース1と2
/**
 * @Description:     
 * @author:Dxh 
 * @date:2018 1 4  
 */
public interface GradeService extends PersonService,AnamalService{

}

インタフェース3の実装クラス
/**
 * @Description:GradeService      
 * @author:Dxh 
 * @date:2018 1 4  
 */
public class GradeServiceImpl implements GradeService{

    @Override
    public void say() {
        System.out.println("     ,  say()");

    }

    @Override
    public void spell() {
        System.out.println("     ,  spell()");        
    }   
}

クライアント
/**
 * @Description:
 * @author:Dxh 
 * @date:2018 1 4  
 */
public class Client {

    public static void main(String[] args) {
        GradeService serviceImpl = new GradeServiceImpl();//         
        serviceImpl.say();
        serviceImpl.spell();

    }
}

出力:インタフェースマルチ継承、メソッドsay()インタフェースマルチ継承、メソッドspell()
2.インタフェース多層継承インタフェース3は、直接定義されたデフォルトメソッド、上書きされたデフォルトメソッド、およびインタフェース1に暗黙的に継承されたデフォルトメソッドを含む、インタフェース2のデフォルトメソッドを継承する.
インタフェース1:
/**
 * @Description:     
 * @author:Dxh 
 * @date:2018 1 4  
 */
public interface AnamalService {

    void say();

}

インタフェース2はインタフェース1を継承します.
/**
 * @Description:     
 * @author:Dxh 
 * @date:2018 1 4  
 */
public interface PersonService extends AnamalService{

    String say(String msg);

    void spell();
}

インタフェース3はインタフェース2を継承する:
/**
 * @Description:     
 * @author:Dxh 
 * @date:2018 1 4  
 */
public interface GradeService extends PersonService{

}

GradeServiceの実装クラス:/**@Description:GradeServiceインタフェースの実装クラス*@author:Dxh*@date:2018年1月4日*/public class GradeServiceImplements GradeServices GradeServices{
@Override
public void say() {
    System.out.println("     ,  say()");
}

@Override
public void spell() {
    System.out.println("     ,  spell()");

}

@Override
public String say(String msg) {
    System.out.println("     ,  say()+name");
    return "name";
}

}クライアント:
/**
 * @Description:
 * @author:Dxh 
 * @date:2018 1 4  
 */
public class Client {

    public static void main(String[] args) {
        GradeService serviceImpl = new GradeServiceImpl();
        serviceImpl.say();
        serviceImpl.spell();
        serviceImpl.say("name");

    }
 }

出力:インタフェースマルチ継承、メソッドsay()インタフェースマルチ継承、メソッドspell()インタフェースマルチ継承、メソッドsay()+name