我是个刚接触JAVA的新手,下面这段代码的打印结果是10,为什么不是20呢?
class A
{
int x=10;
}
class B extends A
{
int x=20;
}
class Test
{
public static void main(String []args)
{
B b=new B();
A a=b;
System.out.println(a.x);
}
}
class A
{
int x=10;
}
class B extends A
{
int x=20;
}
class Test
{
public static void main(String []args)
{
B b=new B();
A a=b;
System.out.println(a.x);
}
}
事实上,你的属性x在对象中有两个实例,你把B类的实例向上转型成了A类型,然后取属性,会取A类型所属的x而不是B的
你可以试着用B类调用A类的属性,like this:class A {
int x = 10;
}class B extends A {
int x = 20;
void printX(){
System.out.println(super.x);
}
}public class TestTest {
public static void main(String[] args) {
B b = new B();
A a = b;
System.out.println(b.x);//20
b.printX();//10
}
}
override是对方法而言,static,private,final方法出外
对于变量,没有override一说,它们的行为成为hiden