1 : Qu'est-ce que le polymorphisme ?
Des formes multiples, c'est-à-dire des objets différents répondent différemment à la même opération.
Deux : Plusieurs notes sur les classes abstraites
1. Les classes abstraites sont modifiées avec abstract
2. Les méthodes abstraites ne peuvent être localisées que dans les classes abstraites
3. Les classes abstraites ne peuvent pas être instanciées
4. Les méthodes abstraites n'ont pas de corps de méthode
5. Les classes abstraites ne peuvent pas être des classes statiques ou scellées
6. Les sous-classes doivent être répétées Écrire toutes les méthodes abstraites de la classe parent, sauf si la sous-classe est aussi une classe abstraite
7. Il peut y avoir des méthodes ordinaires dans la classe abstraite
8. Dans la classe abstraite, il peut y avoir des constructeurs
9. La méthode abstraite dans une classe abstraite consiste à contraindre la forme de la méthode de la sous-classe.
Trois : "Instanciation" des classes abstraites
Bien que la classe abstraite elle-même ne puisse pas être instanciée via new, elle peut pointer l'objet de référence vers l'objet réel de la sous-classe, qui peut également être appelé indirection Instancier.
Personne en tant que classe parent
public abstract class Person{ public int Age { get; set; } public string Name { get; set; } public Person(int age,string name) { this.Age = age; this.Name = name; } public abstract void Say(); public void Eat() { Console.WriteLine("我是父类"); } }
La classe Student hérite de Person
public class Student:Person{ public Student(string name,int age){ public Student(int age, string name):base(age,name) { this.Age = age; this.Name = name; } public override void Say() { Console.WriteLine("子类说话"); } public void Eat() { Console.WriteLine("我是子类"); } }}
Lorsque l'objet de la classe parent pointe vers l'objet réel de la sous-classe, la sous-classe est en premier va Le constructeur de la classe parent transmet ensuite le constructeur de la sous-classe et attribue des valeurs à ses propriétés. ,
Person p = new Student(18, "张宇"); p.Say(); //只有这一种情况,父类变量指向子类对象,调用的是子类的方法, //符合多态,父类和子类方法同名调用的是子类的方法 p.Eat(); //如果没有方法没有发生关系,则默认调用父类的方法。 Student stu = (Student)p; stu.Eat(); //如果要调用子类的特有的方法,需要进行类型转换,在java中称为,向下转型 Console.ReadKey();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!