Qu'est-ce que l'utilisation de l'objet Parent de l'instanciation de l'enfant de la classe
S'il vous plaît dites-moi ce qui est de l'objet parent de l'instanciation de l'enfant de la classe comme:
public class A
{
public A()
{
Console.WriteLine("A");
}
public virtual void method()
{
Console.WriteLine("AM");
}
}
public class B : A
{
public B()
{
Console.WriteLine("B");
}
public new void method()
{
Console.WriteLine("BM");
}
public void method1()
{
Console.WriteLine("BM1");
}
}
class Program
{
static void Main(string[] args)
{
A obj = new B();//what is use of it?
obj.method();
Console.Read();
}
private void methodP1()
{
}
}
s'il vous plaît dites-moi qu'est-ce que l'utilisation de
Parent obj = new Fille();
comme je l'ai on ne peut appeler que des méthodes de la classe parent qui est possible en utilisant
Parent obj = new Parent();
est-il possible de l'Enfant: obj = new Parent() ?
OriginalL'auteur Dr. Rajesh Rolen | 2011-07-02
Vous devez vous connecter pour publier un commentaire.
C'est la base pour le polymorphisme: Imaginez que vous avez plusieurs enfants des classes qui héritent de vous classe parent. Vous souhaitez utiliser la totalité de l'enfant ces classes par le biais de l'interface /les méthodes définies dans votre classe parent, sans se soucier des détails de mise en œuvre de chaque enfant de la classe (chacun peut faire quelque chose de différent, mais avec la même sémantique).
Cela est possible parce que l'enfant de la classe a EST UNE relation avec son parent de la classe depuis l'enfant hérite de l'objet parent.
OriginalL'auteur BrokenGlass
Dans votre exemple, B est- Un, mais Un est-pas-un B.
Ci-dessus est utilisé lorsque le code à l'aide de la référence à B ne peut comprendre (ou a besoin de comprendre) les types de A. B est un spécialisation de A. Imaginez quelque chose comme (pseudo-code)
Le code suivant n'a pas besoin de savoir si s est un carré ou un triangle, juste que c'est une forme. Quelle est l'utilité ? Si vous appelez
s.draw()
, la forme elle-même détermine la façon dont il va. Le code appelant qu'il ne connaît pas ou de soins.C'est un point clé de la programmation orientée objet. Poser des objets pour faire des choses pour vous, plutôt que de déterminer vous-même ce qui est nécessaire.
Noter que votre dernière question n'est pas intuitivement sens lors de l'utilisation de cet exemple.
vs
OriginalL'auteur Brian Agnew
BrokenGlass réponse est bonne. Cependant, votre échantillon devra avoir des comportements différents selon que vous déclarez
obj
typeA
ouB
.Dans le cas de
A obj = new B();
le programme de sortie A B AM parce que le compilateur est un lien vers la méthode virtuelle A. méthode de la classe B hérite de la.Dans le cas de
B obj = new B();
le programme des sorties A B BM parce que le compilateur est redirigé vers la nouveau la méthode B. méthode().Si
B.method()
a plutôt été déclarée commepublic override void method()
, le résultat serait toujours UN B BM, indépendamment de savoir si obj est déclaré comme étant de type A ou de type B.Donc votre exemple ne montre pas de polymorphisme dans le sens classique du terme, comme la méthode appelée sur les instances de type B dépend du type de la variable à laquelle l'instance est attribuée. Cette peut faciliter le débogage amusant et intéressant.
OriginalL'auteur Neil Moss
La raison que vous pouvez utiliser le polymorphisme est de sorte que vous pouvez passer un objet spécifique à une entité qui ne nécessite qu'un objet de plus générale. L'entité qui reçoit l'objet se soucie uniquement de l'interface publique qui est exposée, et non pas les détails de la façon dont les méthodes de cette interface sont effectuées. Voici une simple hiérarchie de classe:
Et voici comment vous pouvez utiliser le polymorphisme:
OriginalL'auteur FishBasketGordo
Si vous ne devez utiliser que les méthodes de la classe parent, vous pouvez aller de l'avant et de l'instancier. L'objet d'une enfant de la classe est d'ajouter des fonctionnalités à la classe parent tout en gardant le parent intacte. L'instanciation de la mère par l'enfant sans l'utilisation ultérieure de l'enfant, la fonctionnalité n'a pas de sens.
Si tout ce que vous devez utiliser est les fonctions de la classe parent, vous n'avez pas besoin d'instancier par un enfant de la classe.
OriginalL'auteur Banago
Il n'y a aucune utilisation dans des exemples simples comme la vôtre, où la portée de l'utilisation de la variable est limitée. Mais il est important de comprendre que dans .NET variables a des types qui sont statiques, connue au moment de la compilation et même si
obj
conserve une référence àChild
classe, il est encore tapé commeParent
.Et quand vous avez une méthode qui requiert
Parent
, vous pouvez passerobj
(de typeChild
) pour elle (et elle se comporte encore commeChild
) - ceci est un exemple deChild
être visés parParent
type.Child obj = new Parent()
n'est pas possible,Parent
n'est pas unChild
, compilateur de ne pas vous laisser affecter un objet à une variable de type incompatible.OriginalL'auteur NOtherDev
Dire que vous avez un parent de la classe appelée Animal et l'enfant classes de Chien, le Chat, et le Lézard. Chaque classe a un appel de méthode makeSound(). Puis, quand vous dites
Animal a1 = new Dog();
etAnimal a2 = new Cat()
,a1.makeSound()
aboient eta2.makeSound()
va miauler.Le terme technique pour ce problème s'appelle le polymorphisme. Il est utile pour la réutilisation du code. Il vous suffit d'écrire le code d'une application qui a des Animaux makeSound() quand ils sont heureux, au lieu de séparer le code pour chaque type d'animal.
Une autre utilisation du polymorphisme est de cacher votre mise en œuvre du code à partir d'autres utilisateurs. Par exemple, vous pouvez montrer aux autres utilisateurs que vous êtes en utilisant une Liste et ensuite vous avez le choix de mettre en œuvre la Liste comme une LinkedList ou comme une liste de tableaux. Vous pouvez également choisir une LinkedList et puis à un moment plus tard, passer à une liste de tableaux sans toucher à vos utilisateurs.
Vous aussi ne peut pas dire
Dog d = new Animal()
parce qu'un Chien est un Animal, mais un Animal n'est pas nécessairement un Chien.OriginalL'auteur Ben
Quand Vous Savez caractéristiques Communes à propos d'une Classe qui hérite de partir et quand vous ne connaissez pas l'exacte enfant vous pouvez mettre les données sur la classe Parent, chaque fois que vous saviez à propos de l'enfant de la classe, vous pouvez attribuer ces valeurs.
OriginalL'auteur Rajitha Prabath Abeyrathna