2017-02-25 126 views
1

我有父類和子類,其中父類具有方法getData。我可以直接從子類調用此方法,無論是否創建對象。 我想知道如何在沒有創建對象的情況下在子類中使用該方法。 (它也不是靜態方法) 這是我的理解,我們必須創建一個對象來訪問方法。任何人都可以解釋爲什麼?Java-在繼承中,可以在不創建類的情況下調用方法

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

你是什麼意思*「沒有創建對象」*?你創建了'testproperties_file'的實例嗎? – UnholySheep

+1

子實例**是**父實例。這就是完整的繼承點。如果一隻動物能跑,比我可以讓一隻狗跑​​,因爲一隻狗是一隻動物。 –

+0

當執行在子類中時,調用在'this'上。它指的是當前的對象。當你調用'test_class'方法時,它將在'testproperties_file'的對象上被調用。 – Sid

回答

1

我想知道如何在不創建對象的情況下在子類 中獲得該方法。

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

    } 
} 

這裏test_class()是一個實例方法。這意味着在此方法中調用的所有代碼都可以調用當前類的實例的可用方法(這裏是testproperties_file)。所以,當這個方法執行時你已經在一個對象中了。

testproperties_file的一個實例繼承自testbase類。
這意味着可以在這裏調用testbase的所有公共和受保護的實例方法。公開getData()testbase的實例方法是可以調用的。


作爲一個附註,你應該使用大寫和駝峯命名你的班級。 TestBaseTestPropertiesFile更好,因爲它們遵循java編碼約定。

1

作爲每

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

子類繼承所有成員從其超類(字段,方法和嵌套類)。構造函數不是成員,因此它們不會被子類繼承,但可以從子類調用超類的構造函數。

我建議你閱讀更多關於雲燕inheritance

子子繼承父類中的所有成員的方法。

如果執行控制達到任何非靜態方法,則意味着有一個對象被創建並且正在調用該方法。 this是對任何方法被調用的當前執行對象的隱式引用。由於派生類的對象具有超類的行爲,因此根據實際派生類的定義添加更多行爲,並且如果有任何行爲被重寫,那麼從超類中刪除的行爲會被修改。

相關問題