有主要的抽象类?

时间:2015-04-07 21:23:15

标签: java

对于抽象类使用main是一般的坏习惯还是允许的,因为抽象类的性质可以有一个体?

2 个答案:

答案 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)

你的抽象类中没有主题的问题。

静态方法不会覆盖,任何子类也可以使用相同的静态方法。