インターフェースと抽象クラスの違いと機能

転載:https : //blog.csdn.net/u012092924/article/details/78342193

概念:
抽象化と具体性は相対的であり、絶対的ではありません。簡単に言うと、概念の意味合いが小さいほど、抽象化の度合いが高くなり、その拡張が大きくなります。逆もまた同様です。たとえば、「人間」は「人間」よりも抽象的であり、「生物学的」は「人間」よりも抽象的であり、「物質」は「生物学的」よりも抽象的です。
抽象概念は、その「共通性」に応じて具体的な概念によって生成され、具体的な概念の多くの個性を排除し、それらの共通性をまとめて記述することで、抽象的な概念が生成されます。抽象的思考とは、人間の思考が進んだ段階で生み出される能力のことです。たとえば、子供たちの思考がまだ成熟していない場合、特定の概念しか理解できません。代名詞「あなた、私、彼」を覚えるのは難しいことがよくあります。代名詞は非常に抽象的です。
つまり、抽象的な概念の拡張は大きく、意味合いは小さく、特定の概念の拡張は小さく、意味合いは大きい。
まず、抽象クラスと通常のクラスの違い:
1、通常のクラスはインスタンス化されていない呼び出しである可能性があります。抽象クラスはインスタンス化できません。これは概念に存在し、非特定ではないためです。

2.通常クラスと抽象クラスの両方を継承できますが、自己クラスも抽象クラスでない限り、サブクラスは、抽象クラスの継承後に継承されたメソッドをオーバーライドする必要があります。

 

public class Pet {  
  
public void play(){                //这是宠物类,普通父类,方法里是空的  
}  
}  
--------------------------  
public class Cat extends Pet {    //这是子类,是一个猫类,重写了父类方法  
public void play(){  
  System.out.println("猫爬树");  
}  
}  
------------------------  
public class Dog extends Pet {    //这是子类,是一个狗类,重写了父类方法  
  public void play(){  
  System.out.println("狗啃骨头");  
 }  
}  
-------------------------  
public class Test {  
public static void main(String[] args) {  //这是测试类,分别调用了子类的不同方法  
  
Pet p1=new Dog();                               //多典型的多态表现啊,相当的给力  
Pet p2=new Cat();  
  
p1.play();  
p2.play();  
}  
}  

出力:
犬は骨を噛み、
猫は木に登ります

問題:親クラスを抽象クラスに、メソッドを抽象メソッドに変更し、次に
public void play(); //抽象メソッドには
変更されていないメソッド本体サブクラスはありませんが、親クラスメソッドを書き換えれば、これは通常の親クラスと同じですえ?
メソッド本体なしで抽象メソッドが完成したと言えますか?次に、通常のメソッドのメソッド本体があります。空のままにすると、取得できません。抽象メソッドと同じではありませんか?
抽象クラスはインスタンス化できないことを教えてください。更新する必要はありません。
通常のクラスを実行できますが、抽象クラスを取得する意味は何ですか?メソッドのない抽象クラスメソッドと同じ効果を達成するために、通常のクラスのメソッドは空白のままにして記述しないこともできると以前に述べました。
両方のメソッドで同じ出力効果を達成できるため、1つのメソッドを取得するだけでは不十分です。なぜ抽象クラスを作成するのでしょうか。普通の授業より見やすさはいいですか?かっこいい?それとももっと便利ですか?または、抽象メソッドの実装を強制して、他の人がそれを使用するように強制する必要がありますか?何を忘れますか?
A:インスタンス化できないことを強制し、サブクラスにメソッドを実装するように強制します。これは、忘れる
ことのない問題ではありませんあなたは、新しいサブクラスに行く必要がないと言います。そう
です。別の質問だと思うのですが、なぜアクセス制御があるのですか?え?プライベートとパブリックに違いがあるのはなぜですか?
私はそれらすべてに公開でアクセスでき、アクセスするべきではありません。それらにアクセスする必要はありません。
アプレットに違いはありません。逆に、プライベートメンバーは一連のセットを作成して関数を取得する必要があります。それはあまりにも面倒です。怠惰なすべてのパブリックです
が、プロジェクトは大きく、
多くのコードがあります。この厳密な構造は非常に重要です。言うまでもなく、一緒にプログラムを作成するために一緒に作業する多くの人々がいるでしょう自分で作成したとしても、それを忘れる暇はありません。コンパイラはエラーを報告しません。膨大なコードの海でエラーを見つけることができますか?
最終的な分析では、オブジェクト指向はモジュール化されており、保守と管理が簡単です。 、操作効率はまだ高いです。

第二に、抽象クラスとインターフェースの違い:
1、コンセプトは異なります。インターフェースはアクションの抽象化であり、抽象クラスは本質の抽象化です。
抽象クラスは、このオブジェクトが何であるかを表します。インターフェイスは、このオブジェクトが実行できることを表します。たとえば、男性、女性、これら2つのカテゴリ(ある場合)は、それらの抽象的なカテゴリは人間です。彼らはすべて人間であることを説明します。人々は食べることができ、犬は食べることができます。「食べる」をインターフェースとして定義し、これらのクラスに実装させることができます。
したがって、高級言語では、クラスは1つのクラス(抽象クラ​​ス)しか継承できません(人間が生物学的および非生物学的の両方になることはできないのと同じように)が、複数のインターフェース(食べるインターフェース、ウォーキングインターフェース)を実装できます。

2.使用方法が異なります。

a。抽象クラスとインターフェイスを使用して具象オブジェクトを抽象化します。ただし、インターフェイスの抽象レベルは最高です
b。抽象クラスは特定のメソッドとプロパティを持つことができ、インターフェイスは抽象メソッドと不変定数のみを持つことができます
c。抽象クラスは主に使用されます抽象カテゴリ、インターフェースは主に関数を抽象化するために使用されます
D.抽象クラスであり、実装が含まれていないため、派生クラスはそれらをオーバーライドする必要があります。インターフェイスのすべてのメソッドは実装されていない必要があります。

e。インターフェイスは設計の結果であり、抽象クラスはリファクタリングの結果です

3.使用方法:モノの本質に焦点を合わせる場合は抽象クラスを使用し、操作に焦点を合わせる場合はインターフェースを使用します。
注:抽象クラスの機能はインターフェースの機能よりはるかに優れていますが、抽象クラスを定義するコストは高くなります。高水準言語(実際の設計の観点から)は、各クラスが継承できるクラスは1つだけであるためです。このクラスでは、そのすべてのサブクラスのすべての共通点を継承または書き込む必要があります。インターフェイスは機能がはるかに弱いですが、それはアクションの説明にすぎません。また、クラスに同時に複数のインターフェースを実装できます。設計段階での難易度が下がります。

公開された51元の記事 ウォンの賞賛4 ビュー7869

おすすめ

転載: blog.csdn.net/u012174809/article/details/104969296