这是关于以下情况:
public class A {
int x=3;
public A() {
setX(x-3);
}
void setX(int z) {
this.x = z;
}
}
public class B extends A {
static int x = 7;
void setX(int z) {
x = z;
}
}
public class Main {
public static void main(String[] args) {
A ab = new B();
System.out.println(B.x);
}
}
输出:0
我已经熟悉这样一个事实,即当我们以这种方式创建一个对象时,子类的方法就会被执行。
根据输出判断,类B中的方法setX将继承的x作为参数,但对静态变量有副作用。是否有此行为的名称或更一般的解释?不熟悉的人可以想一想,该方法将静态变量作为参数,并对继承的变量产生副作用。
答案 0 :(得分:0)
这应该是抽象的执行流程:
x
。对于类型A setX(0)
被定义为使用3初始化的包私有成员,这将导致调用A ab
。setX(0)
在编译时是A类型,但在运行时是B类型。这导致名为B的蜜蜂String input = "-4, 2, -5, 0, 3";
input.replaceAll("\\s",""); // Replaced all spaces/whitespace, now we have "-4,2,-5,0,3"
String[] arr = input.split(",") // Split on the commas
System.out.println(arr[0]); // Will print -4
System.out.println(arr[1]); // Will print 2, etc.
。