One
n'hérite pas de Two
, et c'est ce qui ne fonctionne pas très bien.
L'héritage de classes ne signifie pas cacher ou remplacer la valeur de la propriété d'une classe, mais que la classe dérivée est une spécialisation de la classe de base dont elle hérite.
Par exemple:
public class Cat {
}
public class Dog {
}
Qu'est-ce que ces deux ont en commun?
- Ils ont quatre pieds;
- Ce sont tous des animaux;
- Ils ont des poils;
Qu'est-ce qu'ils n'ont pas en commun?
- Un chat miaule;
- Un chien aux aboiements;
Révisons notre modèle en le mettant dans l'ordre.
public class Cat {
public bool HasHair { get { return true; } }
public int Legs { get { return 4; } }
public string Speaks { get { return "Meows"; } }
}
public class Dog {
public bool HasHair { get {return true; } }
public int Legs { get { return 4; } }
public string Speaks { get { return "Barkles"; } }
}
Maintenant, pour gagner du temps et coder, que pourrions-nous faire? Généraliser ce que les deux classes ont en commun? Bien! Mais comment le faire ainsi?
public class Animal {
public bool HasHair { get { return true; } }
public int Legs { get { return 4; } }
public virtual string Speaks { get { return "Does a sound"; } }
}
// We can now inherit from Animal to write our Cat and Dog classes.
public class Cat : Animal {
public overrides string Speaks { get { return "Meows"; } }
}
public class Dog : Animal {
public overrides string Speaks { get { return "Barkles"; } }
}
Et vous pouvez faire:
Dog dog = new Dog();
dog.Legs; // Because Legs is an Animal property, and a Dog inherits from Animal, then Dog has a property called Legs, since it got it from his base class.
Maintenant, nous pouvons faire:
Animal pet = (Animal)(new Cat());
Cela dit, vous pouvez typer un Cat
à un Animal
, parce qu'il est une Animal
! Maintenant, vous devez considérer que votre Cat
typecasted va "faire un bruit", au lieu de "meowling", car en tapant Cat
à Animal
, vous dites que vous voulez travailler avec Animal
, tant qu'il est un. Donc, les deux Cat
et Dog
sont des animaux.
Nous pourrions pousser notre exemple encore plus loin en disant que tous les animaux n'ont pas quatre pattes, certains n'en ont pas et d'autres n'en ont que deux. Ensuite, il faudrait généraliser et se spécialiser en conséquence.
Puisque deux étend un (aime ce nom;)), la deuxième chaîne n'existe que dans deux et non un. Si vous deviez définir first = "blah" dans Two, cela pourrait fonctionner mais je n'ai pas essayé de faire quelque chose comme ça depuis un moment. – clifgriffin