从具有相同名称的子类调用方法-java

从具有相同名称的子类调用方法-java,java,inheritance,parent-child,parent,Java,Inheritance,Parent Child,Parent,我有一个有一个父类和多个子类的程序。所有子类都有相同的方法名,但执行不同的函数。我希望能够从特定类调用该方法。比如说 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

我有一个有一个父类和多个子类的程序。所有子类都有相同的方法名,但执行不同的函数。我希望能够从特定类调用该方法。比如说

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
。我该怎么做呢?

只需创建子类的实例并对其调用方法即可

要调用B类的didABC:

B b = new B();
b.didABC();
C c = new C();
c.didABC();
要调用C类的didABC:

B b = new B();
b.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

只需创建子类的实例并对其调用方法

要调用B类的didABC:

B b = new B();
b.didABC();
C c = new C();
c.didABC();
要调用C类的didABC:

B b = new B();
b.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
现在你可以这样做了

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()"
现在你也可以这样做了

public class A
{
    public void doABC() { didABC(); }
    public void didABC() { System.out.println("A::didABC()"); }
}
A a = new A();
a.doABC(); // Prints "A::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()"
现在你也可以这样做了

public class A
{
    public void doABC() { didABC(); }
    public void didABC() { System.out.println("A::didABC()"); }
}
A a = new A();
a.doABC(); // Prints "A::didABC()"
  • 您试图做的事情无法使用继承来实现。父类将永远也不应该知道子类是什么
  • 您可以尝试使用组合而不是继承。你可以阅读有关作文的文章
  • 快速而肮脏地实现您想要的:

    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();
      }
    }
    
    对于任何设计模式,我知道它不是复合设计模式的正确实现。这只是他想在这个问题上实现的一个快速而肮脏的实现

  • 您试图做的事情无法使用继承来实现。父类将永远也不应该知道子类是什么
  • 您可以尝试使用组合而不是继承。你可以阅读有关作文的文章
  • 快速而肮脏地实现您想要的:

    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();
      }
    }
    

    对于任何设计模式,我知道它不是复合设计模式的正确实现。这只是他在问题中想要实现的一个快速而肮脏的实现。

    如果您确切知道要调用哪个方法,那么继承可能是该工作的错误工具。只需将它们全部移动到A,并为它们指定不同的名称。如果您确切知道要调用哪个方法,那么继承可能是用于该作业的错误工具。只要把他们都搬到A,给他们起不同的名字。