鱼C论坛

 找回密码
 立即注册
查看: 2970|回复: 2

静态成员变量继承的问题

[复制链接]
发表于 2019-3-6 13:39:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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 {
}

A类中定义静态成员变量

A类中定义静态成员变量

B类继承A类,在定义同名静态成员变量

B类继承A类,在定义同名静态成员变量

C类继承B类

C类继承B类

测试

测试

结果

结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-6 19:53:35 | 显示全部楼层
简单的来说,A是父类,C是子类,子类隐藏了父类的成员变量,所以A调用的是子类隐藏的成员变量
而B是父类,C是子类,子类继承了父类的成员变量,所以B调用的是子类继承的成员变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 05:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表