java中使用不同参数替代重写(这是不可能的)

java中使用不同参数替代重写(这是不可能的),java,oop,Java,Oop,嗨,我面临一个设计问题,我认为这应该是很常见的: public abstract class Parent { ... public boolean itsOk() { return true; } public void execute() { if (itsOk()){ System.out.println("done"); } } } 我需要能够在从“Parent”继

嗨,我面临一个设计问题,我认为这应该是很常见的:

public abstract class Parent
{
    ...

   public boolean itsOk()
   {
       return true;
   }
   public void execute()      
   { 
       if (itsOk()){
          System.out.println("done");
       }
   }
}
我需要能够在从“Parent”继承的任何子类中重写itsOK()函数,即使参数不同

public class Example extends Parent
{
    public boolean itsOK(int a)
    {
       if (a==1)      return true;
       else           return false;
    }

}
然后,当我调用execute时,我希望调用子类'itsOk()方法

public static void main(String[] args) {
    Example e=new Example();
    e.execute();
}
如果子类'itsOk()方法没有参数(如'Parent's method'),则此方法可以正常工作,因此这是一种覆盖情况,但当参数不同时,如何使其生效?

Call
super.itsOk()
在子类“
itsOk
方法中

也就是说,我假设您的意思是希望在子类中定义一个重载
itsOk
,它做了一些新的事情,但也调用父类的
itsOk
的默认实现

另一方面,请注意术语:you'snot重写:要做到这一点,子类中的
itsOk
必须具有与父类中相同的方法签名。相反,您正在重载创建一个恰好具有相同名称的全新方法。

Example
中的
itsOk(int a)
方法没有覆盖
itsOk()
父类中的方法
-它是一个完全独立的方法,与类
父类中的方法无关

使用
a
的哪个值,当您在
Parent
中调用
itsOk()
时,是否希望调用
示例中的
itsOk(int a)

当然,您可以将
itsOk(inta)
方法添加到类
Parent
;然后,
Example
中的版本将覆盖该版本,在
execute()
方法中,您可以调用它:

public abstract class Parent {
    public boolean itsOk() {
        return true;
    }

    public abstract boolean itsOk(int a);

    public void execute() {
        if (itsOk(0)) {
            System.out.println("done");
        }
    }
}
如果不在类
Parent
中声明
itsOk(int a)
方法,则无法在
父对象上调用该方法(或者在
示例对象上调用该方法,如果引用该对象的变量类型为
Parent


我不认为这是一个常见的设计问题。

当参数不同时,它不再是重写的情况。它被称为重载,这基本上意味着您要调用两个不同的方法。

您可以使用泛型:

public abstract class Parent
{
    ...

   public <T> boolean itsOk(T t)
   {
       return true;
   }
   public void execute()      
   { 
       if (itsOk()){
          System.out.println("done");
       }
   }
}

public class Example extends Parent<Integer>
{
    public boolean itsOK(Integer a)
    {
       if (a==1)      return true;
       else           return false;
    }

}
公共抽象类父类
{
...
公共布尔itsOk(T)
{
返回true;
}
public void execute()
{ 
if(itsOk()){
系统输出打印项次(“完成”);
}
}
}
公共类示例扩展了父类
{
公共布尔itsOK(整数a)
{
如果(a==1)返回true;
否则返回false;
}
}

在这种情况下,我宁愿尝试在父类和子类中使用相同的方法签名,即真正的覆盖而不是重载。然后,您的参数a可以是类示例的成员,这样就不需要参数了。当然,这在很大程度上取决于代码的其余部分。

这个想法还可以,但这是行不通的<代码>示例
应该扩展
父级
而不是原始的
父级
,但是不能使用诸如
int
之类的基本类型来填充Java中的类型参数。在这种情况下,应该使用
Integer
。另外,
itsOk()
调用
Parent
不会自动调用接受参数的
itsOk
。相关问题:我知道重写对不同的参数不起作用,我只是想知道一种方法。我需要一种方法来确保每当子类扩展父类时,execute()都会调用子类“itsOk()方法”而不是父类的方法,即使该方法具有不同的参数,除非子类中未定义“itsOk()”,否则在这种情况下会调用父类的方法。如果这是不可能的,我将在您的示例调用
execute()
中传递一个字符串数组作为参数(这样数组可以是空的,也可以具有可变长度):如果这样做,并且子
itsOK()
被调用,那么它的参数
int a
会发生什么?