更奇怪的是,我稍微修改了上面的代码,把I设置为friendly int,如下:public abstract class A {
int I=1;
public void getI() {
System.out.println("I="+I);
}
}public class B extends A {
int I=2;
public static void main(String[] args) {
B b=new B();
b.getI();
}
}那么,I已经不再是一个常量,B中的I已经覆写了A中的I,但为什么我调用b.getI()的时候,打印出来的依然是1呢? 百思不得其解。
int I=1;
public void getI() {
System.out.println("I="+I);
}
}public class B extends A {
int I=2;
public static void main(String[] args) {
B b=new B();
b.getI();
}
}那么,I已经不再是一个常量,B中的I已经覆写了A中的I,但为什么我调用b.getI()的时候,打印出来的依然是1呢? 百思不得其解。
建议你把getI()方法重写一次。
我编译没通过。。 一个文件中好像不可以有两个public class吧?
public abstract class A {
int I=1;
public void getI() {
System.out.println("I="+I);
}
}public class B extends A {
{
I=2;
}
public static void main(String[] args) {
B b=new B();
b.getI();
}
}
可以使I=2
public abstract class A {
static final int I=1;//去掉private
public void getI() {
System.out.println("I="+I);
}
}public class B extends A {
{I=2;}
public static void main(String[] args) {
B b=new B();
b.getI();
}
}
这样也是可以的。
形成初始化块,它将在MAIN前就执行了,于是I=2;