2017-02-25 1 views
1

Ich habe Eltern- und Kindklassen, in denen die Elternklasse eine Methode hat - getData. Ich kann diese Methode direkt von der Kindklasse aufrufen, mit oder ohne ein Objekt zu erstellen. Ich frage mich, wie die Methode in der Kindklasse verfügbar wird, ohne ein Objekt zu erstellen. (Es ist auch keine statische Methode) Es war mein Verständnis, dass wir ein Objekt für den Zugriff auf die Methoden erstellen müssen. Kann mir bitte jemand erklären warum?Java - Bei der Vererbung kann die Methode aufgerufen werden, ohne eine Klasse zu erstellen

public class testbase { 

    public void getData(String Data) throws IOException{ 
     Properties prop1; 

     prop1= new Properties(); 
     FileInputStream f= new FileInputStream("C:\\file.properties"); 
     prop1.load(f); 


     String data= prop1.getProperty(Data); 
     System.out.println(data); 
    } 

} 


class testproperties_file extends testbase { 

    @Test 
    public void test_class() throws IOException{ 
     getData("name"); 

    } 
} 
+0

Was meinst du * "ohne ein Objekt zu erstellen" *? Sie erstellen eine Instanz von 'testproperties_file', nicht wahr? – UnholySheep

+1

Eine untergeordnete Instanz ** ist ** eine übergeordnete Instanz. Das ist der ganze Sinn der Vererbung. Wenn ein Tier rennen kann, dann kann ich einen Hund bitten zu rennen, weil ein Hund ein Tier ist. –

+0

Wenn die Ausführung in der Kindklasse ist, ist die Invokation auf "this". Es bezieht sich auf das aktuelle Objekt.Und wenn Sie die Methode 'test_class' aufrufen, wird sie für das Objekt' testproperties_file' aufgerufen. – Sid

Antwort

1

Ich frage mich, wie die Methode in der Kindklasse verfügbar wird, ohne ein Objekt zu erstellen.

class testproperties_file extends testbase { 
    @Test 
    public void test_class() throws IOException{ 
     getData("name"); 

    } 
} 

Hier test_class() ist eine Instanzmethode. Dies bedeutet, dass der gesamte in dieser Methode aufgerufene Code Methoden aufrufen kann, die für eine Instanz der aktuellen Klasse verfügbar sind (hier testproperties_file). Sie befinden sich also bereits in einem Objekt, wenn diese Methode ausgeführt wird.

Eine Instanz von testproperties_file erbt von der Klasse testbase.
Dies bedeutet, dass hier alle öffentlichen und geschützten Instanzmethoden von testbase aufgerufen werden können. Die öffentliche getData() Instanzmethode von testbase ist so aufrufbar.


Als eine Randnotiz sollten Sie Großbuchstaben und Camelcase verwenden, um Ihre Klasse zu benennen. TestBase und TestPropertiesFile sind besser, da sie der Java-Kodierungskonvention folgen.

1

Per

https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

Eine Unterklasse erbt alle Mitglieder (Felder, Methoden und verschachtelte Klassen) von seiner übergeordneten Klasse. Konstruktoren sind keine Member, daher werden sie nicht von Unterklassen geerbt, sondern der Konstruktor der Oberklasse kann von der Unterklasse aufgerufen werden.

Ich würde vorschlagen, dass Sie mehr abour inheritance

Sub Kind lesen erbt alle Member-Methoden aus seiner Superklasse.

Wenn die Ausführungssteuerung eine nicht statische Methode erreicht, bedeutet dies, dass ein Objekt erstellt wurde und dass diese Methode aufgerufen wird. this ist der implizite Verweis auf das aktuell ausgeführte Objekt, auf dem eine Methode aufgerufen wird. Da das Objekt der abgeleiteten Klasse das Verhalten der Superklasse hat, werden mehr Verhaltensweisen gemäß der Definition der tatsächlichen abgeleiteten Klasse hinzugefügt, und auch wenn irgendein Verhalten überschrieben wird, wird das von der Superklasse abgeleitete Verhalten modifiziert.

Verwandte Themen