在下面的场景中,我想用类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
}
}
答案 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
的行为。