我是Java新手,我有一個非常基本的問題。重寫受保護的方法
我有2個父類下相同的包。 Animal
抽象類和Machine
類。
現在,Animal
抽象類具有受保護的方法。我知道,如果這些類在同一個包中,那麼受保護的方法是可訪問的。
我可以訪問我的Machine
類中受保護的方法,問題是..是否可以重寫該受保護的方法?不擴展Animal
類。
我是Java新手,我有一個非常基本的問題。重寫受保護的方法
我有2個父類下相同的包。 Animal
抽象類和Machine
類。
現在,Animal
抽象類具有受保護的方法。我知道,如果這些類在同一個包中,那麼受保護的方法是可訪問的。
我可以訪問我的Machine
類中受保護的方法,問題是..是否可以重寫該受保護的方法?不擴展Animal
類。
謝謝你回答這個基本問題。 :) – 2012-07-24 07:30:29
這一個是正確的答案。丹尼斯薩利比奧,你應該玩一下階級層次結構。 – TecHunter 2012-07-24 07:30:48
您只能通過擴展來覆蓋方法。
如果您願意,您可以使用匿名子類覆蓋受保護的方法。例如。
public class Animal {
protected String getSound() {
return "(Silence)";
}
public void speak() {
System.out.println(getSound());
}
}
在另一大類:
public static void main(String ... args) {
Animal dog = new Animal() {
@Override
protected String getSound() {
return "Woof!";
}
}
dog.speak();
}
將輸出:
Woof!
Animal animal = new Dog(); 我用這個代碼來訪問該方法,我只是想知道如果我可以覆蓋受保護的方法。 – 2012-07-24 07:28:02
謝謝你回答這個基本問題。 :) – 2012-07-24 07:32:17
我已經更新了我的答案,以顯示如何創建動物的匿名子類來表示一隻狗,而不實際創建一個名爲Dog的類。 – 2012-07-24 10:35:30
爲了覆蓋你必須擴展該類中的方法。這就是重寫意味着什麼:使用與超類相同的簽名方法。
謝謝你回答這個基本問題。 :) – 2012-07-24 07:33:42
否,覆蓋意味着繼承父類的行爲,如果不擴展類,這是不可能的。
public class PClass
{
protected boolean methodA()
{
return true;
}
}
public class CClass extends PClass
{
protected boolean methodA()
{
return false;
}
}
運行下面的代碼來測試它
public static void main(String[] args)
{
PClass pc=new CClass();
System.out.println(pc.methodA());
}
O/p=false
這裏我們覆蓋methodA
謝謝你回答這個基本問題。 :) – 2012-07-24 07:34:39
重寫定義說的行爲..
的實例方法d在具有相同簽名(名稱,加上其參數的數量和類型)的子類中,並且返回類型作爲超類中的實例方法覆蓋超類的方法。
所以AFAIK如果你沒有擴展超類沒有辦法覆蓋該方法。
受保護的只能被其他包中的子類訪問。同一包中的類也可以訪問受保護的字段,方法和構造函數,即使它們不是受保護成員類的子類。
替代: 具有相同簽名的子類中的實例方法。
回答你的問題的:
但是,如果你不想extends
Animal class
在Machine class
那麼它不重寫它只是一個正常的自己的類的功能。
你嘗試過嗎?結果是什麼? – 2012-07-24 07:25:41
繼承之後出現重寫...你說的是不可能的...... :) – 2012-07-24 07:31:12