2016-10-21 2 views
0

Ich verstehe etwas wirklich grundlegend mit Vererbung. Ich habe eine Elternklasse:Java dies in Eltern und Kind funktioniert nicht wie erwartet

public class Parent { 
    String s = "Parent"; 
    Parent() {} 
    String getS() { 
     return this.s; 
    } 
} 

und ein Kind Klasse:

public class Child extends Parent { 
    String s = "Child"; 
    Child() { } 
} 

Main ist wie:

Parent parent = new Parent(); 
Child child = new Child(); 
Log.e(TAG, "parent:" + parent.getS()); 
Log.e(TAG, "child:" + child.getS()); 

I parent.getS() zurückzukehren "Parent" und child.getS() zurückzukehren erwarten " Kind "aber beide kehren" Eltern "zurück." Bestimmt das Methodenpräfix nicht das this für die Methode, wenn auf diese Weise aufgerufen?

Danke Steve S.

Antwort

1
  • Ihre getS() Methoden von Elternklasse wird in der Kinderklasse geerbt und daher ist es für Kinder Objekt zur Verfügung.
  • Überschreiben ist nur für Methoden und nicht für Variablen.
  • Also selbst wenn Sie eine neue Variable mit dem gleichen Namen definieren, wird es nicht wirksam, da es nicht
+0

Ah ... Danke. –

+0

Siehe hier für mehr: http://stackoverflow.com/questions/772663/having-2-variables-with-the-same-name-in-a-class-that-exts-another-class-in-j – MordechayS

0

außer Kraft gesetzt werden Sie sollten eine Getter-Methode, dh erstellen gets() in der Kinderklasse abzurufen " Child ", wenn Sie child.getS() in Ihrer Hauptmethode aufrufen. Auf diese Weise überschreiben Sie die getS() -Methode, die von der Parent-Klasse geerbt wurde.

0

Die Art und Weise Sie die s -Mitglied in der Eltern-Teil eines Kindes-Klasse festgelegt würde, wäre ein protected Konstruktor zu bieten (könnte es natürlich auch public sein):

protected Parent(String s) { this.s = s; }

, die die Zeichenfolge auf den angegebenen Wert setzt. Sie würden dann als der erste Anruf diesen Konstruktor rufen in Ihrem Kind-Konstruktor mit

super("Whatever you want");

Verwandte Themen