gpt4 book ai didi

java - 从抽象类继承静态变量

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:19 25 4
gpt4 key购买 nike

我有六个类,它们都扩展了同一个抽象类。抽象类有一个指向一些 JNI 代码的静态变量,我只想在类的每个实例化时加载一次。

据我了解,这会导致实例化此静态变量的一个实例,但我想要的是每个扩展类都有自己的变量静态实例,该实例对于给定的子类是唯一的。我想在我的抽象类中编写一些代码来修改和/或释放抽象类。是否可以同时做这两件事?

作为示例,我可以编写一个带有变量 foo 的抽象类 bar 和一个打印 foo 内容的 printFoo 方法。然后我按顺序实例化 fooBar1、fooBar2 和 fooBar3,它们各自扩展 bar 类并在静态 block 中将 foo 初始化为不同的值。如果我调用 foobar1.printFoo,我想打印由 fooBar1 构造函数初始化的 foo 的静态值。

这可以用java完成吗?

最佳答案

你可以近似它,但是你需要为每个子类单独的静态变量,以阻止子类覆盖彼此的值。最简单的方法是通过 getter getFoo 对其进行抽象,以便每个子类从正确的位置获取 foo。

像这样

abstract class Bar
{
// you don't have to have this in the base class
// - you could leave out the variable and make
// getFoo() abstract.
static private String foo;

String getFoo() {
return foo;
}

public void printFoo() {
System.out.print(getFoo());
}
}

class Foo1 extends Bar
{
static final String foo1;

public String getFoo() {
return foo1; // return our foo1 value
}

public Foo1() {
foo1 = "myfoo1";
}
}


class Foo2 extends Foo1
{
static final String foo2;

public String getFoo() {
return foo2; // return our foo2 value
}

public Foo2() {
foo2 = "myfoo2";
}
}

关于java - 从抽象类继承静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5667764/

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