请教一个java的基础问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 23:46:14
class TestA {
private int i = 1;
public TestA(){
int i=2;
}
public void print(){
System.out.println(i);
}
}

class TestB extends TestA {
private int i = 3;
public TestB(){
int i=4;
}
public void print(){
System.out.println(i);
}
}

public class Test {

public static void main(String[] args) {
TestA test = new TestB();
test.print();
}
}

为什么运行结果是3?
构造函数好像没有起作用?

构造函数只是起初始化的作用,运行程序的第一步就自动赋值i=4,然后才运行
private int i = 3;构造函数起到初始作用,所以最后值是3.

怎么说呢。里氏替换规则。。当new testb()得时候调用了子类的构造方法。有个条件。是先要调用父类的无参构造方法,不信你在父类中调用个print函数,在调用子类的。调用完了后就调用private i = 3;最后在打印的时候就会打印出3来。。。典型的oop

你的构造函数里的i已经是你重新声明的了,它是个局部变量,而不是那个类的成员变量i了