我有一节课,Super:
public class Super {
public static String foo = "foo";
}
Run Code Online (Sandbox Code Playgroud)
我还有另一个类,Sub它扩展了Super:
public class Sub extends Super {
static {
foo = "bar";
}
public static void main (String[] args) {
System.out.println(Super.foo);
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它打印出来bar.
我的第三个(也是最后一个)课程是Testing:
public class Testing {
public static void main (String[] args) {
System.out.println(Super.foo);
System.out.println(Sub.foo);
System.out.println(Super.foo);
}
}
Run Code Online (Sandbox Code Playgroud)
这打印:
foo
foo
foo
Run Code Online (Sandbox Code Playgroud)
我不明白为什么内容foo会有所不同,具体取决于您从哪个班级访问它.谁能解释一下?
我试图了解我在 Java 中绕过多态的方式。我创建了一个父类,它有太多的通用方法,所有的孩子都会以相同的方式使用。
每个子类的子类都共享静态信息,这些变量或信息将用于仅在父类中声明的方法中。
希望从父方法访问静态变量的问题似乎不太可能,
它是声明每个实例的公共信息的解决方案,但由于将有 1000 个实例,因此浪费了内存。
我的意思的简单阐述是以下代码:
class testParent {
static int k;
public void print()
{
System.out.println(k);
}
}
class testChild2 extends testParent
{
static
{
testChild2.k =2;
}
}
public class testChild1 extends testParent{
static
{
testChild1.k = 1;
}
public static void main(String[] args)
{
new testChild1().print();
new testChild2().print();
new testChild1().print();
}
}
Run Code Online (Sandbox Code Playgroud)
我期望的输出是
1
2
1。
但发生的情况是:
1
2
2
人们可能会认为在每个子类的初始化时设置了这个子类的静态变量,然后所有引用这个子类的方法都可以访问相应的 'k ' 价值。
但实际发生的情况是,所有子类都在同一个静态变量中进行编辑,该变量与所有子类共享,因此破坏了我为每个子类及其实例使用静态变量并在父类中使用通用方法访问这些变量的全部意义。
知道怎么做吗?