这是我的一些代码。 Rabbit和Fox类都是超类的子类,它们各自都有一个getCounter()方法,该方法返回一个int值。我收到一条错误消息,说getCounter()不是有效的方法。我知道它在当前类中不存在,但是如果代码执行getCounter,将可以访问它。 (getCounter也是静态的。)
public static String setGender(Object obj){
int specificCounter;
Class s = obj.getClass();
if(s == Fox.class|| s == Rabbit.class){
specificCounter = s.getCounter();
答案 0 :(得分:0)
在诸如Java之类的面向对象的编程语言中,通常使用polymorphism解决此类问题。
例如,您可以让基类声明一个抽象方法,并在每个子类中提供单独的实现。
我链接的Java教程包含有关如何执行此操作的示例。
答案 1 :(得分:0)
您可以使用instanceof
进行类检查(if(obj instanceof Fox)
)。但是,如果您有许多不同的子类,则会导致很多其他情况。
但是重要的是您要使用meriton提到的多态性。从您的问题中,我推断出所提供的代码在Fox和Rabbit的超类中,我们假设它被称为Animal
。现在,您不必接收对象,但可以接收动物。只要Animal类具有方法getCounter()
(对于更具体的实现,子类甚至可以重写该方法),则现在可以调用obj.getCounter()
class Animal {
public static String setGender(Animal obj){
int specificCounter = obj.getCounter();
}
}
答案 2 :(得分:0)
正如许多其他人指出的那样,这里似乎存在很多问题。
似乎没有足够的信息可以帮助任何人。相反,请尝试阅读Java的工作原理。
java类-https://docs.oracle.com/javase/tutorial/java/javaOO/index.html
java继承-https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
java Oracle Documentation&Tutorials-https://docs.oracle.com/javase/tutorial/java/index.html
答案 3 :(得分:0)
正如许多其他人所提到的那样,超类应该独立存在,并且完全不知道子类。有时您“有”做这样的奇怪事情,但是如果可能的话,应该避免这样做。在正常设计中,可以接受3种常见方法:
使“动物”成为一个接口,所有逻辑都将在 实现接口的类
声明动物抽象,并将setGender抽象化,填充 在子类中实现代码。
在这种情况下,最好的方法是:覆盖其中的“ setGender()”方法 您的子类,并对子类执行任何特定操作 调用super.setGender()(如果适用)之后在其中。
像这样:
public class Fox extends Animal {
private String speciesGender;
@Override
public void setGender(String gender) {
super.setGender(gender);
//add specific stuff for fox
if(gender.equals("F")) {
speciesGender = "Vixen";
} else {
speciesGender = "Tod"
}
}
}
spceciesGender的吸气剂在Animal中可以是抽象的,也可以强制创建它。切片的方法很多...