Java 有没有办法实施';抽象类方法&x27;在爪哇?
更新: 我知道静态方法不能是抽象的,我知道为什么,这不是一个像“是否可能”或“为什么不可能”这样的问题,我只是想知道是否有办法得到我想要的 好的,如果您听说过python中的@classmethod,那么您可以跳过其余部分 我想要的是:在某些情况下,有些方法只是函数,我只需要它的功能。但是,在Java中,您必须将所有内容都放在一个类中,因此我必须将这些函数封装在一个类中,并将它们设置为静态。问题是,对于像这样的类,我不需要,也不应该需要它的任何实例。同时,我希望像这样的类有一些层次结构。这里的层次结构类似于一些“控制”:我可以控制子类来完成您应该做的事情,也就是您应该拥有的方法/函数Java 有没有办法实施';抽象类方法&x27;在爪哇?,java,Java,更新: 我知道静态方法不能是抽象的,我知道为什么,这不是一个像“是否可能”或“为什么不可能”这样的问题,我只是想知道是否有办法得到我想要的 好的,如果您听说过python中的@classmethod,那么您可以跳过其余部分 我想要的是:在某些情况下,有些方法只是函数,我只需要它的功能。但是,在Java中,您必须将所有内容都放在一个类中,因此我必须将这些函数封装在一个类中,并将它们设置为静态。问题是,对于像这样的类,我不需要,也不应该需要它的任何实例。同时,我希望像这样的类有一些层次结构。这里的层
众所周知,我们不能在类中声明
静态抽象
方法
但是,有时您只需要方法而不需要实例,并且需要方法是抽象的并在子类中实现它
一些人指出了这一点,但是有什么可能的解决办法吗?不,你不能主要是因为“抽象”和“静态”方法的术语相互矛盾。 请参见此处的详细说明:
您的静态方法不能是抽象的,但您可以使用功能接口,预定义的接口如,甚至很可能满足您的所有需求,以下是预定义接口的列表:
如果这些不符合您的需求,您可以因此能够传递任意方法引用。。。请务必始终检查null,尽管静态方法不能声明为抽象,因为重写(子类型多态性)不适用于静态方法。如果需要解决方法,这里有一个:
public void myMainFunction() {
ArrayList<Animal> animals = new ArrayList<Animal>();
animals.add(AnimalFactory.createAnimal(Bird.class,birdXML));
animals.add(AnimalFactory.createAnimal(Dog.class,dogXML));
}
public abstract class Animal {
/**
* Every animal subclass must be able to be created from XML when required
* (E.g. if there is a tag <bird></bird>, bird would call its 'createFromXML' method
*/
public abstract Animal createFromXML(String XML);
}
public class Bird extends Animal {
@Override
public Bird createFromXML(String XML) {
// Implementation of how a bird is created with XML
}
}
public class Dog extends Animal {
@Override
public Dog createFromXML(String XML) {
// Implementation of how a dog is created with XML
}
}
public class AnimalFactory{
public static <T extends Animal> Animal createAnimal(Class<T> animalClass, String xml) {
// Here check class and create instance appropriately and call createFromXml
// and return the cat or dog
}
}
public void mymain函数(){
ArrayList你想用它做什么?不。将静态方法标记为抽象是没有意义的。方法的重写基于对象(实例),而不是类型本身。静态方法仅依赖于类型,而不依赖于任何特定实例。为什么不直接调用MyabstractClass.someMethod()
?您现在无法创建一个抽象类的实例,因此我现在可以确定您希望添加静态
的操作会有所不同,或者您正在尝试做的事情会有所不同。顺便说一句,如果您只需要抽象方法,接口可能是一个更好的选择。这对我来说似乎是一个XY问题。您想做什么精神上?