2012-04-03 9 views
0

Kann mir jemand helfen?Ich kann nicht auf eine öffentliche Variable innerhalb einer Unterklasse in Haupt zugreifen?

Ich mache ein Spiel auf XNA.

ich ein Gameobject Klasse, die als Basisklasse wirkt für Character.class oder Object.class

Es gibt auch Game.class

Ich wollte nur fragen, habe ich eine Unterklasse von GameObject, die eine öffentliche Variable canJump genannt hat.

Aus irgendeinem Grund kann ich nicht einmal auf die Variable zugreifen.

Ich habe GameObject character = new Character();

Dieses Objekt einfach alle überschriebenen Funktionen der Basisklasse zugreifen können, aber es wird nicht zulassen, dass mich öffentlichen Variablen verwenden.

+0

denken ein Beispiel: (Mensch erstreckt Tier) Alle Menschen sind Tiere, aber nicht alle Tiere sind menschliche – mshsayem

Antwort

1

Nun, ja, der Compiler weiß nicht, dass die GameObject eigentlich eine Character ist. Es sei denn, Sie einen guten Grund, nicht zu haben, nur Character verwenden:

Character character = new Character(); 
+0

Hmmm der Compiler nicht eh nicht kennt? Das ist merkwürdig ... wie kann es override Funktionen verwenden? Und private Variablen innerhalb der Unterklasse? – user819511

+2

@ user819511: Es tut es nicht. Die Laufzeit tut es. Wie für die Unterklasse weiß der Compiler, dass die Unterklasse von dem Elternteil abgeleitet ist. – Ryan

+0

Oh in Ordnung ... Gotchya. Ich werde sehen, was ich dagegen tun kann. – user819511

1

Polymorphismus ist hier das Stichwort. Minitech ist korrekt, der Compiler weiß, dass es ein GameObject ist, so dass Sie nur Zugriff auf die GameObjects-Oberfläche haben. Sie können die überladenen Methoden verwenden, da sie auch Teil der GameObjects-Oberfläche sind, so dass Sie zur Laufzeit tatsächlich die Character-Version dieser Methode erhalten. In Ihrem Code können Sie tun Dinge wie:

if(character is Character) //Character being the subclass 
{ 
    (character as Character).DoSomeCharacterSpecificStuff; 
}