我有两个问题,但它们大概是相同的(相似?)问题。我的课程中变量和函数的可访问性
第一个问题:
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