从具有相同名称的子类调用方法-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,给他们起不同的名字。