静态成员变量继承的问题
A类中定义一个静态成员变量ageB类继承A类,再定义一个静态成员变量age与A中的相同
C类继承B类
测试:为什么结果是2 1 2,B类中重新定义的age是放在哪个内存空间的?C类能否从B中继承到A中的age?
public class test {
public static void main(String[] args) {
C c = new C();
System.out.println(c.age);
System.out.println("====================");
A a =new C();
System.out.println(a.age);
System.out.println("====================");
B b = new C();
System.out.println(b.age);
}
}
A类
public class A {
public static int age = 1;
}
B类
public class B extends A {
public static int age = 2;
}
C类
public class C extends B {
}
C c = new C();
A a =new C(); ----> A a;C c = new C();a = c;
B b = new C(); ----> B b;C c = new C();b = c;
其中后两种都属于上转型对象,a是c的上转型对象,b是c的上转型对象
而上转型对象不能操作子类新增的成员变量和方法。
上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的方法。
简单的来说,A是父类,C是子类,子类隐藏了父类的成员变量,所以A调用的是子类隐藏的成员变量
而B是父类,C是子类,子类继承了父类的成员变量,所以B调用的是子类继承的成员变量
页:
[1]