对于抽象类使用main是一般的坏习惯还是允许的,因为抽象类的性质可以有一个体?
答案 0 :(得分:5)
当然,抽象类可以有一个main方法,就像任何类都可以有一个main一样,实际上它是测试抽象类的一种方法 - 如果你在main方法中创建它的具体实现。对抽象类唯一不能做的就是按原样构造它们,而不是扩展它们并实现所有抽象方法。
public abstract class Foo {
public abstract void bar();
public static void main(String[] args) {
// anonymous inner class representation
Foo foo = new Foo() {
// must implement all abstract methods
public void bar() {
System.out.println("bar");
}
};
foo.bar();
}
}
编辑:VitalyGreck的好点:
抽象类是抽象的,因为它们没有在它们的体内实现某些方法。在main()方法中实现bar()(甚至是静态)会使您的类的用户感到困惑。好的做法是创建两个单独的类,其中一个是抽象的,另一个是 - 包含实现和静态方法。或者使用反射动态查找封闭类(请参阅stackoverflow.com/questions/936684/…)。
换句话说 - 只是因为可以完成,并不意味着应该完成。
答案 1 :(得分:2)
你的抽象类中没有主题的问题。
静态方法不会覆盖,任何子类也可以使用相同的静态方法。