IrAts 发表于 2019-3-6 13:39:43

静态成员变量继承的问题

A类中定义一个静态成员变量age
B类继承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 {
}

暗pluto 发表于 2019-3-6 19:50:50


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的上转型对象
而上转型对象不能操作子类新增的成员变量和方法。
上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的方法。

暗pluto 发表于 2019-3-6 19:53:35

简单的来说,A是父类,C是子类,子类隐藏了父类的成员变量,所以A调用的是子类隐藏的成员变量
而B是父类,C是子类,子类继承了父类的成员变量,所以B调用的是子类继承的成员变量
页: [1]
查看完整版本: 静态成员变量继承的问题