gpt4 book ai didi

java - 有一个没有抽象方法的抽象类有什么意义呢?

转载 作者:搜寻专家 更新时间:2023-10-31 08:19:40 26 4
gpt4 key购买 nike

可以有一个抽象类实现它的所有方法——其中没有抽象方法。

例如:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com