我有2个问题,但它们都是相同(相似)的问题。

第一个问题:

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的情况下运行doSomethingApublic

第二个问题:

我创建了自己的TextBox,有一个名为myValue的变量。现在,我创建一个继承AdvancedTextBoxTextBox,并且AdvancedTextBox需要访问myValue变量。问题是,我希望将来的开发人员同时使用TextBoxAdvancedTextBox,否则继承它们将无法访问myValue。可能吗?

编辑:Oli Charlesworth和NullUserExceptionఠ_ఠ告诉我让C直接继承A(第一个问题)。但是,在某些情况下这可能是灾难。例如:A = TextBox,B = AdvancedTextBox,C = NumberAdvancedTextBox,如果C继承了A,则C必须做一些B再次做的事情,并作一些小的改动。

最佳答案

这个怎么样 ...


将A和C放在同一包装中,然后将B放在不同的包装中。
从A.doSomethingA()中删除“私人”
给C一个A的实例。
由于C和A在同一个程序包中,因此C可以随时调用A.doSomethingA()。


这是A的定义

package ac;

public class A {

    public void myProcedure() {
        doSomethingA();
    }

   void doSomethingA() {}

}


这是B的定义

package b;

public class B extends A {

    @Override
    public void myProcedure() {
        doSomethingB();
        // IT DOESN'T CALL super.myProcedure
    }

    private void doSomethingB() {}

}


这是C的定义

package ac;
// do you really need to extend B?
public class C {
    A a = new A();

    public void myProcedure() {
        a.doSomethingA();
    }

}

09-30 19:46