2012-12-18 65 views
2

如何在此類父類中調用私有方法?我所做的是一個醜陋的代碼,但它工作,雖然我不認爲這是一個真正的解決方案。是否可以從Java中的子類訪問父類的私有方法?

真的很感謝這方面的一些建議。我一直在尋找解決方案,但沒有給我一些明確的問題。

public abstract class Car { 

     public void passItOn(int a) { 

       takesVariable(a); 

     } 
    private void takesVariable(int a) { 

     //Process the variables 
    } 

孩子:

 public abstract class Wheel extends Car { 

    boolean a = anotherMethod(); 
     if(value() != a) { 
      passItOn(a); 
     } 

    } 

有一些問題,我的accaptance率,但我就可以了!所有會給答覆+標記!

+6

如果你想使用它們,讓你的方法'私人'有什麼意義?如果您希望將它們用於派生類,請更好地使用'protected'。 –

+0

使用'protected'訪問修飾符而不是'private'。雖然你的問題不清楚。 – Amar

+0

我同意Rohit,如果有理由不這樣做 - 爲什麼會有一個! - ,我認爲你的解決方案是好的 –

回答

10

訪問私有字段/方法is possible using reflection如果安全管理器允許它,但強烈反對。

私人方法是私人的原因。如果你有權訪問基類,使方法protected是一個更好的解決方案。

+0

有沒有其他方法可以做到這一點? –

+0

@HarshitGupta不是我的知識。 –

4

私有方法不會被繼承,所以不能被調用。如果您確實想訪問此方法,請更改其訪問修飾符關鍵字(protectedpublic)。

+0

+1你只能在相同外部類的同一個Java文件中調用私有方法。否則「私人」就意味着只有這個班。 –

+0

糾正我,如果我錯了,但私有方法也繼承,你不能在子類中調用它們。這是因爲從父類調用public/protected方法並且它們調用私有方法時沒有錯誤。 – Tomasz

1

如果您想從子類中找到它,請將其設爲protected

1

這絕對沒有辦法做到。你不能調用任何其他類的類的private方法(無論是擴展類)。它只能在該類中進行訪問。有一個原因據說是private

如果您希望僅通過擴展類訪問,而不是外部世界,請使用protected訪問修飾符來實現您的功能。

2

做,如果你是罰款使其保護:如果你想保持私人出於某種原因

public class BaseClass { 
    protected void whatever() {} 
} 

或者這一點,它也會給你的基類在如何/時,「更多的控制權無論」用於:

public class BaseClass { 
    private void whatever() {} 
    protected void doWhatever() { 
     if(!forSomeReasonDoNotWantThisToBeUsed()) {   
      whatever(); 
     } 
    } 
} 
相關問題