有没有办法在java中实现’抽象类方法’?

Is there any way to implement 'abstract class method' in java?

本问题已经有最佳答案,请猛点这里访问。

更新:我知道静态方法不能是抽象的,我也知道为什么,这不是像"是否可能"这样的问题。或者"为什么不可能?"我只想知道有没有办法得到我想要的。

好吧,如果你听说过python中的@classmethod,你可以跳过其余的部分。

我想要的是:在某些情况下,有些方法只是函数,我只需要它的功能。但是,在Java中,你必须把所有的东西都放在一个类中,所以我必须在一个类中包装这些函数并将它们设置为静态的。问题是,对于像这样的类,我不需要,也不需要它的任何实例。同时,我想要一些这样的类的层次结构。这里的层次结构类似于一些"控制":我可以控制子类来实现你应该做的,也就是说你应该拥有什么方法/函数。

众所周知,我们不能在类中声明static abstract方法。

但是,在某些情况下,您只需要方法而不需要实例,并且需要将方法抽象并在子类中实现。

有些人指出,这在Java中可能是一个糟糕的设计,但是有没有可能的解决方案呢?


不,你不能主要是因为"抽象"和"静态"方法的术语相互矛盾。具体说明如下:为什么静态方法不能在Java中抽象


您的静态方法不能是抽象的,但是您可以使用功能接口,像函数、双功能甚至消费者这样的预定义接口最有可能满足您的所有需求,下面是预定义接口的列表:http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html

如果这些不符合您的需求,您可以编写自己的接口,从而能够传递任意方法引用…不过,请务必始终检查是否为空


静态方法不能声明为抽象方法,因为重写(子类型多态性)不适用于静态方法。如果需要解决方法,请执行以下操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
    }
}

我从这里得到:静态抽象方法解决方法