我有兩個問題,但它們大概是相同的(相似?)問題。我的課程中變量和函數的可訪問性
第一個問題:
public class A {
public void myProcedure() {
doSomethingA();
}
private void doSomethingA() {}
}
public class B extends A {
@Override
public void myProcedure() {
doSomethingB();
// IT DOESN'T CALL super.myProcedure
}
private void doSomethingB() {}
}
public class C extends B {
@Override
public void myProcedure() {
// I need to execute A's myProcedure here
}
}
如何運行A
的myProcedure
,竟未doSomethingA
到public
?
第二個問題:
創建我自己的TextBox
,有一個名爲myValue
變量。現在我創建一個AdvancedTextBox
,它繼承TextBox
和AdvancedTextBox
需要訪問myValue
變量。問題是,我希望未來的開發者同時使用TextBox
和AdvancedTextBox
,或者繼承他們不能訪問myValue
。可能嗎?
編輯: Oli Charlesworth和NullUserExceptionఠ_ఠ告訴我讓C直接繼承A(第一個問題)。但是,有些情況可能會造成災難。例如:A = TextBox,B = AdvancedTextBox,C = NumberAdvancedTextBox,如果C繼承了A,所以C必須做一切B再做的事情,只需稍作更改。
第一:使它受到保護,而不是私人的。 – corsiKa
由[替代原則](http://en.wikipedia。org/wiki/Liskov_substitution_principle),'C'類型的對象應該像'B'的專業化一樣。如果您不得不將行爲「倒退」回到「A」,這意味着您的層次結構不正確。 –
我同意@OliCharlesworth。如果你需要從C訪問A的方法,也許C應該直接從A. – NullUserException