将empty方法替换为使用它的类中的方法

时间:2013-09-15 17:20:55

标签: java

在下面的场景中,我想用类A中的方法替换B类(类似D,E,F等)方法doSomething(),它将被使用。我该怎么做?举一些例子,希望它得到消息

public class B implements GetNames{
   public void getNameA(){ return "NameA"; }
   public void getNameB() { return "NameB"; }
   public void doStuff(){
      //print names
      doSomething(getNameA(), getNameB());
      //print names
   }
   public void doSomething(String a, String b){}

}

public class A{
   public void someMethod(){
       B b = new B();
       b.doStuff(); //*So I want it to call the method in B but somehow replace the doSomething method in B with the doSomething method in A
   }

   public void doSomething(String a, String b){
       //print 'blabla' + a
       //print 'blablabla' + b
       //concatenate and print
   }
}

2 个答案:

答案 0 :(得分:1)

制作abstract类A实现接口GetNames,然后在B类中扩展它:

public abstract class A implements GetNames {
   public void doSomething(String a, String b){
       //print 'blabla' + a
       //print 'blablabla' + b
       //concatenate and print
   }
}

public class B extends A {
   public void getNameA(){ return "NameA"; }
   public void getNameB() { return "NameB"; }
   public void doStuff(){
      // class A's doSomething will be called
      doSomething(getNameA(), getNameB());
      //print names
   }
}

答案 1 :(得分:1)

班级A应该扩展班级B。如果将B设为抽象类,B.java文件将如下所示:

public abstract class B {
    ...
    public abstract void doSomething(String a, String b);
    ...
}

抽象类有一些功能,比如已经定义的getNameA方法,但其他方法如doSomething留给它的子类来实现。

将A类改为:

public class A extends B {
    ...
    @Override
    public void doSomething(String a, String b) {
        // custom behaviour
    }
}

如果您想要的只是创建一个类B的实例,该实例具有不同的方法doSomething的实现,那么您可以做的是:

B myBInstance = new B() {
    @Override
    public void doSomething(String a, String b) {
        // custom behaviour here
    }
};

myBInstance.doStuff();

风格和设计方面,这只是一种快速而简单的方法来定义一次性使用B的行为。