C#の抽象クラス


抽象:漠然とした
抽象クラスの特徴:
1.メソッド宣言のみが存在し、メソッド体が存在しない(実装されていない)場合.このメソッドは抽象メソッドです.メソッドが存在するクラスは抽象クラスに違いありません.この場合、abstractで修飾する必要があります.
2.抽象クラスをインスタンス化できますか?抽象メソッドではメソッドが実装されていないため、抽象クラスはインスタンス化(オブジェクトの作成)できません.
3.抽象クラスは、抽象クラスのすべての抽象メソッドを上書き(書き換え)してから、そのサブクラスをインスタンス化する必要があります.サブクラスは、すべての抽象メソッドを実装する必要があります.
抽象クラスの詳細:
1.抽象クラスにコンストラクション関数はありますか?はい、サブクラスオブジェクトを作成して親を初期化するために使用されます.
2.抽象クラスで抽象メソッドを定義しなくてもいいですか?いいですよ.
3.abstractキーワードはそれらのキーワードと共存できませんか?private sealedstatic
4.抽象類と普通類の違いは?
同じ点:抽象クラスと一般クラスで物事を記述するために使用されるものは、クラスの内部で任意のメンバー(メソッド、属性、フィールド、コンストラクション関数)を定義できます.
相違点:
a.一般類は物事を記述するのに十分な情報を持っており、抽象類は食べ物を記述するのに十分な情報が不足している可能性がある.
b.普通のクラスでは抽象的な方法を定義することができず、非抽象的なものしか定義できない.抽象クラスは両方とも定義できます.
c.一般クラスはインスタンス化できる:抽象クラスはインスタンス化できない
5.抽象クラスは必ず親ですか?
はい、抽象クラスは、布団クラスが継承された後にすべてのメソッドを上書きしてから、サブクラスオブジェクトをインスタンス化できます.
 
abstract classAnimal
{
  publicinta = 3;
  publicabstractvoidEat();
}
class Dog: Animal //       
{
publicoverridevoidEat()//    Eat  
 {
  Console.WriteLine("   "+ a);
 }
}
class Demo
{ static viodMain(string[]args)
  {
  newDog().Eat(); //              
  }
}

抽象クラスの特徴:
抽象クラスと抽象メソッドはabstractキーワードで修飾する必要があります.
抽象メソッドはメソッド宣言のみであり、メソッド体はなく、抽象クラスに定義されます.フォーマット:修飾子abstractは、値タイプ関数名(パラメータリスト)を返します.
抽象クラスはインスタンス化できません.つまりnewでオブジェクトを作成できません.抽象類は具体的な事物から抽出されたものであり,それ自体は具体的ではなく,対応する実例がないからである.例えば:犬科は抽象的な概念で、本当に存在するのは狼と犬です.
抽象クラスはそのサブクラスによってインスタンス化され、サブクラスは抽象クラス内のすべての抽象メソッドを上書き(書き換える)してからオブジェクトを作成する必要があります.そうしないと、このサブクラスも抽象クラスです.
抽象クラスには非抽象的な方法があります.
抽象クラスと一般クラスの違い:
抽象クラス宣言ではabstractキーワードを使用して定義しますが、一般クラスでは必要ありません.
抽象クラスの抽象メソッドにはメソッド主体がなく,メソッドの宣言しかできない.
抽象クラスが継承されると、サブクラスはすべての抽象メソッドを再実装する必要がありますが、通常のクラスは必要ありません.
抽象クラスには抽象的な方法がある場合が多いが、普通のクラスには抽象的な方法がないに違いない.
シーンを使用:
親のメソッドがどのように実現されるか分からない場合は、親を抽象クラスに書き、メソッドを抽象メソッドに書くことを考えることができます.
親クラスのメソッドにデフォルトのインプリメンテーションがあり、親クラスをインスタンス化する必要がある場合は、親クラスを通常のクラスとして定義し、虚メソッドでマルチステートを実装することも考えられます.
親クラスのメソッドにデフォルトの実装がなく、親クラスもインスタンス化する必要がない場合は、クラスを抽象クラスとして定義できます.