JAvaマルチ継承
7039 ワード
オブジェクト向けの3つのプロパティ:カプセル化、継承、マルチステート.
マルチ継承のまとめ:javaのクラスではマルチ継承は許可されていません.すなわち、サブクラスは単一の親クラスしか継承できませんが、複数のインタフェースインタフェースを実装することでマルチ継承が可能になります.すなわち、1つのインタフェースで複数のインタフェースを継承することができます.原則:a.クラスはインタフェースより優れている.サブクラスが継承する親と実装のインタフェースに同じ方法がある場合.では、子クラスが親クラスを継承する方法b.子タイプの方法は、親タイプの方法よりも優先される.
クラス継承サブクラスは、単一の親のみを継承(extends)できるため、マルチ継承は存在しません.
インタフェース継承例:1.インタフェースは複数の親インタフェースを継承します
注:複数の親インタフェースのメソッド署名が同じでパラメータが異なる場合、複数の親インタフェースのデフォルトメソッドが異なり、複数の親インタフェースのデフォルトメソッドが暗黙的に継承されますが、戻り値が異なり、メソッドが同じです.
インタフェース1
インタフェース2
インタフェース3、継承インタフェース1と2
インタフェース3の実装クラス
クライアント
出力:インタフェースマルチ継承、メソッドsay()インタフェースマルチ継承、メソッドspell()
2.インタフェース多層継承インタフェース3は、直接定義されたデフォルトメソッド、上書きされたデフォルトメソッド、およびインタフェース1に暗黙的に継承されたデフォルトメソッドを含む、インタフェース2のデフォルトメソッドを継承する.
インタフェース1:
インタフェース2はインタフェース1を継承します.
インタフェース3はインタフェース2を継承する:
GradeServiceの実装クラス:/**@Description:GradeServiceインタフェースの実装クラス*@author:Dxh*@date:2018年1月4日*/public class GradeServiceImplements GradeServices GradeServices{
}クライアント:
出力:インタフェースマルチ継承、メソッドsay()インタフェースマルチ継承、メソッドspell()インタフェースマルチ継承、メソッドsay()+name
マルチ継承のまとめ: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