我有抽象类动物,然后我有像狗和猫这样的类,并且扩展了类动物。
我想确保父类动物的所有子类都有一个静态方法:getProperties。即使其他人无权访问我的代码,也可以实现一个新的动物子类。
我希望它是静态的,因为Dog类的所有Animals都具有完全相同的属性(或者您不需要Dog来了解Dog的一般外观),因此它是在classtype上调用的方法,而不是类实例。
这可能吗?
不,不可能。静态上下文中没有继承。而且,没有办法强制类实现静态方法。
Java对象模型不支持类端继承(与Smalltalk或Ruby不同)。您必须显式实现域的元模型,例如,如下所示:
public abstract class AnimalDescriptor<T> { // or <T extends Animal>
public abstract List<String> getProperties();
public abstract T newAnimal();
}
public class DogDescriptor extends AnimalDescriptor<Dog> {
public static final DogDescriptor INSTANCE = new DogDescriptor();
public List<String> getProperties() { ... }
public Dog newAnimal() { return new Dog(); }
}
void doStuff(AnimalDescriptor<?> desc) {
desc.getProperties();
}
doStuff(DogDescriptor.INSTANCE);
这只是一个例子,你必须适应它来满足你的需要。例如,您可能希望在动物端添加一个< code>getDescriptor()方法。
Java中的静态
意味着方法(例如)与类的任何实例都不相关。它对所有实例都是通用的,它的实现只是嵌套在类中。
当我读到你的问题时,我相信你需要一个抽象
的方法在动物
类。
public abstract class Animal {
public abstract <some-return-type> getProperties();
}
在这种情况下,每个继承 Animal
的类都必须提供 getProperties
方法的实现(在本例中不是静态
的)。
如果您希望它是静态的,就让它成为静态的(在< code>Animal类中),但是这样您将有一个单独的共享实现。
我使用架构和堆栈。 对于服务之间的通信,我决定使用。 我有一个名为的服务,今天我实现了一个项目,并将其添加到存储库中。 我添加了到服务使用使用以下命令: 现在我想在中创建一个服务类,
问题内容: 抽象类是否必须至少具有一个抽象方法? 问题答案: 这篇文章的主题和正文提出了两个不同的问题: 它应该至少有一个抽象成员吗? 是否需要至少一个抽象成员? #2的答案肯定是“否”。 #1的答案是主观的,是风格的问题。我个人会说是的。如果您的目的是防止实例化一个类(没有抽象方法),那么最好的方法是使用构造函数,而不是对其进行标记。
我有一个关于接口的问题,比如: 现在,我需要这只猫去抓一只老鼠void catchMouse(){std::cout 有几种可能的解决方案,但看起来都不好。 > 在IAnim中添加一个方法,然后使用AnimalFactory创建猫后,我可以从IAnimal调用catchMouse()方法。但是catchMouse并不适用于所有动物,狗不catchMouse。将方法添加到IEM会污染界面,嗅到代码。
问题内容: 我最近从使用PHP切换到Java,并进行了查询。想强调一下我是Java的初学者。 本质上,我正在使用文件A(具有类A),并且想要引用保存在文件B(类B)中的静态方法。使用A类时是否需要参考文件B?(我正在考虑使用PHP中的require_once)我在A类中的代码如下: Eclipse无法将B识别为类。我是否需要创建B的实例才能访问静态方法。觉得我真的忽略了某些东西,希望您能提出任何建
我创建了两个类:和。下面是进行计算的方法: 这里是一个调用并显示结果的函数,不幸的是,我无法根据这本书要求它运行的方式来运行它。 任何提示都会帮助我在我的再教育过程中。
不管是C#还是Java,都要强制类定义“示例”字段吗?