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();
    }
}