gpt4 book ai didi

java - 抽象类从实现子类获取参数?

转载 作者:行者123 更新时间:2023-12-01 07:35:35 24 4
gpt4 key购买 nike

我想知道是否有办法在不破坏封装的情况下做到这一点,我希望抽象类依赖于实现子类中定义的参数。就像这样:

public abstract class Parent {

private int size;
private List<String> someList;

public Parent() {
size = getSize();
someList = new ArrayList<String>(size);
}

public abstract int getSize();

}

public class Child extends Parent {

@Override
public int getSize() {
return 5;
}

}

这丑吗?有没有更好的办法?也许更重要的是,这是一个好主意吗?

编辑:

这些类是在框架的上下文中创建的,因此始终调用默认的无参数构造函数(实际上,父类扩展了另一个类)。 size 参数仅用于说明目的,我不打算将其用于 List 实现。

最佳答案

不,并不丑。这种模式被称为“模板方法”。但通常,当方法不是简单的 getter 而是实现业务逻辑的方法时,它会更有用。

在您的情况下,其他解决方案是在父类中定义 protected 构造函数,并使用子类中的相关参数调用它:

public abstract class Parent {

private int size;
private List<String> someList;

protected Parent(int size) {
this.size = size;
someList = new ArrayList<String>(size);
}

public int getSize() {
return size;
}

}

public class Child extends Parent {
public Child() {
super(5);
}
}

关于java - 抽象类从实现子类获取参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12551212/

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