覆盖所有父母在该方法中工作的方法?

时间:2011-07-20 11:16:50

标签: java oop parent

我有一个B类,它从A类延伸,B类覆盖了A类的方法:

public class ClassB extends ClassA {

    @Overrides
    protected void DoSomething() {
        super.DoSomething();
        // Some ClassB code here, called WorkB
    }
}

之后,我创建了一个B类对象,除了DoSomething()中的A版本之外,我还需要做一些额外的事情:

ClassB objB = new ClassB() {

    @Overrides
    protected void DoSomething() {
        // I need to do something more here
    }

}

我需要知道我是否可以完成所有ClassA个工作,ClassB有效,然后在此方法中为objB添加一些其他代码?我有一个解决方案:在public method中创建一个ClassBWorkB,然后在objB中,只需调用该方法。但我想知道是否有另一种方式(无论是更糟糕还是更好我的解决方案!)。

编辑:我将总结这个问题,以便您轻松理解:

  • Class A的{​​{1}}方法可以完成一项名为WorksA的工作。
  • doSomething会覆盖Class B,调用super.doSomething()和一些额外的代码,这意味着它会doSomething和一个名为WorksA的额外代码。 / LI>
  • 对象WorksB objB方法必须执行doSomething()WorksA以及另一个额外的WorksB

就是这样。

2 个答案:

答案 0 :(得分:4)

是的,只需先打电话给super.doSomething()然后它会一直打到A级,然后再打到B级。之后你可以做特定的事情。

public class A {
public void doSomething() {
    System.out.println("A, ");
}

}

public class B extends A {
public void doSomething() {
    super.doSomething();
    System.out.println("B, ");
}

}

public static void main(String[] args) {
    B b = new B() {
        @Override
        public void doSomething() {
            super.doSomething();
            System.out.println("new B");
        }
    };
    b.doSomething();
}

输出A,B,新B

答案 1 :(得分:2)

您的对象是ClassB的匿名子类的实例,您可以完全相同的方式覆盖:

ClassB objB = new ClassB() {

    @Override
    protected void DoSomething() {
        super.DoSomething();
        // do something more here just for this object.
    }

}

此代码将首先调用ClassB DoSomething()ClassA,该版本调用ClassA版本。所以净效果首先是ClassB的东西,然后是@Override的东西,然后是特定于匿名子类的东西。

我认为你的注释错了。它是DoSomething()没有“s”。可能只是一个错字。

另请注意,您的doSomething()是非标准命名。根据Java中通常命名的方法,你最好调用它{{1}}。