JavaインタフェースVS抽象メソッド
インタフェースvs抽象方法
インタフェース:抽象的な方法->基本設計図で、基本的なフレームワークを提供し、中間メディア活動も担当します.
抽象クラス:サブ(サブ)クラスで完了→未完了の設計図を継承する
差異
抽象クラスインタフェースはマルチ継承をサポートしていませんマルチ継承は抽象クラス実装を提供できません「extends」キーワードを使用して抽象クラスを展開します「implements」キーワードを使用して抽象クラスの私有、私有、保護された指定子使用可能なインタフェースのデフォルトはpublicです(Java 8 defaultメソッドJava 9=>privateメソッドを追加)
すなわち
インタフェースは完全に抽象的です
抽象クラスは部分抽象です
クラスがマルチ継承をサポートしない理由
CatクラスとDogクラスはそれぞれAnimalクラスを継承する.
cry()大げさすぎる
1行目でMypetクラスが複数のCat,Dogを継承して問題が発生
2行目でcry()メソッドを呼び出すと、CatクラスとDogクラスにcry()があるため、区別できない曖昧性があります.
class Animal {
public void cry() {
System.out.println("짖기!");
}
}
class Cat extends Animal {
public void cry() {
System.out.println("냐옹냐옹!");
}
}
class Dog extends Animal {
public void cry() {
System.out.println("멍멍!");
}
}
① class MyPet extends Cat, Dog {}
public class Polymorphism {
public static void main(String[] args) {
MyPet p = new MyPet();
② p.cry();
}
}
インタフェースマルチ継承
interface Cat{
void cry();
}
interface Dog{
void cry2();
}
class Animal implements Cat,Dog{
@Override
public void cry() {
System.out.println("고양이 야옹");
}
@Override
public void cry2() {
System.out.println("강아지 멍멍");
}
}
public class Main{
public static void main(String[] args) {
Animal a=new Animal();
a.cry();
a.cry2();
}
}
Reference
この問題について(JavaインタフェースVS抽象メソッド), 我々は、より多くの情報をここで見つけました https://velog.io/@ghks285/Java-인터페이스-vs-추상메서드テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol