Is there any way to implement 'abstract class method' in java?
本问题已经有最佳答案,请猛点这里访问。
更新:我知道静态方法不能是抽象的,我也知道为什么,这不是像"是否可能"这样的问题。或者"为什么不可能?"我只想知道有没有办法得到我想要的。
好吧,如果你听说过python中的@classmethod,你可以跳过其余的部分。
我想要的是:在某些情况下,有些方法只是函数,我只需要它的功能。但是,在Java中,你必须把所有的东西都放在一个类中,所以我必须在一个类中包装这些函数并将它们设置为静态的。问题是,对于像这样的类,我不需要,也不需要它的任何实例。同时,我想要一些这样的类的层次结构。这里的层次结构类似于一些"控制":我可以控制子类来实现你应该做的,也就是说你应该拥有什么方法/函数。
众所周知,我们不能在类中声明
但是,在某些情况下,您只需要方法而不需要实例,并且需要将方法抽象并在子类中实现。
有些人指出,这在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 } } |
我从这里得到:静态抽象方法解决方法