可以有一个抽象类实现它的所有方法——其中没有抽象方法。
例如:
public abstract class someClass {
int a;
public someClass (int a) { this.a = a; }
public void m1 () { /* do something */ }
private void m2 () { /* do something else */ }
}
与具有相同类的具体类相比,拥有这样一个抽象类有什么优势(如果有的话)?
我能想到的一个是,当我将它声明为抽象时,它不会被实例化。 但是,我可以通过将其具体化并将其构造函数设为私有(private)来产生相同的效果。
TIA。
//==================
编辑:我能想到的另一种用途:
它可能正在扩展另一个抽象类或实现一个接口(interface)而不实现该类的抽象方法——尽管它正在实现它自己的所有方法。无论它值多少钱。
最佳答案
它有一个概念上的意义:这个类有一个行为,它本身没有意义。
诚然,如果没有明确定义的扩展点(即抽象方法),很难想象这样的场景,但偶尔它会是您的问题的一个相当准确的模型。
你可以有这样的东西:
public abstract class ObjectWithId {
private final String id;
public ObjectWithId( String id ) {
this.id = id;
}
public final String getId() {
return id;
}
}
然后您可以扩展它来声明具有 ID 的不同类型的对象。这里有一个完全指定和实现的行为,但对子类可能表现出的任何其他行为没有限制。
请注意,为同一事物建模的更简洁的方法是使用组合而不是继承。
public final class ObjectWithId<T> {
private final String id;
private final T ob;
public ObjectWithId( String id, T ob ) {
this.id = id;
this.ob = ob;
}
public String getId() {
return id;
}
public T getObject() {
return ob;
}
}
但是在引入泛型之前(直到 Java 版本 1.4),这不会像抽象类解决方案那样优雅并且明显更好,因为您必须在类型安全性方面进行交易。
关于java - 有一个没有抽象方法的抽象类有什么意义呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25692811/