我有一个包含1个父类和多个子类的程序。所有子类具有相同的方法名称但执行不同的功能。我希望能够从特定的类中调用该方法。例如
class A
{
public void doABC()
{
//do something;
//call Class B's method didABC;
//call Class C's method didABC }
}
class B extends A
{
public void didABC()
{
//does something;
}
}
class C extends A
{
public void didABC()
{
//does something;
}
}
我希望能够在我想要的时候致电B级didABC
和C级didABC
。我该怎么做?
答案 0 :(得分:4)
只需创建子类的实例并在其上调用方法。
致电B级的didABC:
B b = new B();
b.didABC();
致电C级的didABC:
C c = new C();
c.didABC();
您可以在父类引用中保存子类的对象,也可以使用该引用调用方法。无论父类将保留哪个类对象,它都将简单地调用该类方法。
A a = new A();
a.didABC(); // class A method will be called
a = new B();
a.didABC(); // class B method will be called
a = new C();
a.didABC(); // class C method will be called
答案 1 :(得分:1)
public abstract class A
{
public void doABC() { didABC(); }
public abstract void didABC();
}
class B extends A
{
public void didABC() { System.out.println("B::didABC()"); }
}
class C extends A
{
public void didABC() { System.out.println("C::didABC()"); }
}
现在你可以这样做
A b = new B();
b.doABC(); // Prints "B::didABC()"
A c = new C();
c.doABC(); // Prints "C::didABC()"
如果你不希望A类是抽象的,你也可以这样做
public class A
{
public void doABC() { didABC(); }
public void didABC() { System.out.println("A::didABC()"); }
}
现在你也可以这样做
A a = new A();
a.doABC(); // Prints "A::didABC()"
答案 2 :(得分:0)
快速而又脏的实现你想要的东西:
interface DoAbc {
public void doAbc();
}
class B implements DoAbc {
public void doAbc() {
//B's implementation
}
}
class C implements DoAbc {
public void doAbc() {
//C's implementation
}
}
class A implements DoAbc {
DoAbc b,c;
A(DoAbc b, DoAbc c) {
this.b=b;
this.c=c;
}
public void doAbc() {
//A's implementation
b.doAbc();
c.doAbc();
}
}
对于纳粹的任何设计模式,我知道它不是复合设计模式的正确实现。对于他想在问题中实现的目标,它只是一个快速而肮脏的实现。