Sim*_*mon 2 java abstract-class static-methods
我有以下课程:
public abstract class A
{
public abstract String doSomething(String X, String Y);
public static String doSomething(String X, String Y){return X + Y;}
...
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是静态和抽象doSomething()方法似乎是重复的.我认为这应该没问题,因为静态方法属于类,而不是类的实例,因此我将使用抽象方法在所有子类上强制执行该方法,并将静态方法作为帮助程序,以便我很好地使用因子代码.
我知道我可能会在混合中添加一个接口,但我真的不明白我在同一个类上存在的抽象和静态方法有什么问题.这有什么问题?
在Java中,从对象实例调用静态方法而不是类名称(尽管许多编译器生成警告)是有效的(尽管有误导性和混淆).
System.out.println(String.valueOf(true)); // Prints "true".
System.out.println("".valueOf(true)); // Prints "true", unfortunately.
Run Code Online (Sandbox Code Playgroud)
所以下面看似有效的代码不知道要调用哪些方法:
A a = getInstanceOfConcreteSubclassOfA();
a.doSomething(null, null); // Compiler can't decide which method to call...
Run Code Online (Sandbox Code Playgroud)
不幸的是,它只是Java语言中为数不多的几个角落之一.