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'),则此方法可以正常工作,因此这是一种覆盖情况,但当参数不同时,如何使其生效?Callsuper.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
会发生什么?