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