没有方法的抽象类

时间:2014-04-17 12:25:02

标签: java abstract-class

是否有一个用例我们需要一个没有定义方法的抽象类?我只是为了泛型而创建了这样一个抽象类,以便用户只传递这个类的子类型。但是我想知道它们是否有效或者有更好的方法。

2 个答案:

答案 0 :(得分:5)

拥有一个没有方法的抽象类是合法的,但却完全没有意义。您使用抽象类来共享实现。如果一个类没有方法,则没有实现可以共享。

如果你需要共享一些常见的变量(我假设你的抽象类至少有一些字段,否则它完全是空的)你会更好地使用合成和接口,如下所示:

class CommonData {
    // Some getters and setters for items that you wish to share
}
interface WithCommonData {
    CommonData getCommonData();
}

您的类可以将公共数据作为成员,并实现接口WithCommonData,使您可以访问公共数据,并让类保持其继承结构。

如果你需要"标记"用户类,使用"标记界面" (即没有方法的接口)更灵活,因为用户保留了构建自己的继承链的能力。

答案 1 :(得分:1)

创建一个抽象类只是因为其他类应该属于那种类型是不必要的。这可以使用接口来实现。 由于类只能扩展一个类但实现任意数量的接口,因此使用接口作为实例验证器不会限制有关继承的解决方案。

示例:

public interface Vehicle {
    // No methods, we just want several classes to be identified as of type Vehicle
}


public class Car implements Vehicle {
    // is a vehicle
}

public class Motorcycle implements Vehicle {
    // is a vehicle
}

public class Banana {
    // is not a vehicle
}

public class Main {
    public static void main(String[] args) {

        Object o = new Car();
        if(o instanceof Vehicle) {
            // Ok
        }

        Object p = new Banana();
        if(p instanceof Vehicle) {
            // Will never get here
        }
    }
}