java继承中,成员变量的覆盖
来源:互联网 发布:新浪微博淘宝卖家认证 编辑:程序博客网 时间:2024/05/16 15:46
其实Java继承中,成员变量(包括静态变量,实例变量,常量)没有覆盖(override)一说,应该叫隐藏(hidden)。override只针对方法来说的。
当成员变量为private时,其他类不能直接访问到,只能通过非private方法 访问,因此直接按照分析方法的思路分析,如该方法是否有覆盖,该方法是否是静态方法。
当成员变量为static时,即静态变量,在类加载过程中就分配了内存,因此只与访问的变量类型有关。
class Super {
static String v = "Super";
}
class Sub extends Super {
static String v = "Sub";
public static void main(String[] args) {
Sub sub = new Sub();
System.out.println(sub.v); // 变量sub属于Sub类型,因此输出Sub
Super sooper = new Super();
System.out.println(sooper.v); // 变量sooper属于Super类型,因此输出Super
Super sb = new Sub();
System.out.println(sb.v); // 这里虽然new了一个Sub对象,但使用Super类型的变量sb指向它,(可以认为把Sub对象强转为了Super类型),因此输出的应该是Super
}
当成员变量为非private时(缺省,protected,public),只与访问的变量类型有关。
把上例中成员变量v的static变为public:
class Super {
public String v = "Super";
}
class Sub extends Super {
public String v = "Sub";
public static void main(String[] args) {
Super sb = new Sub();
System.out.println(sb.v); // 这里也是输出Super
}
这里如果要追问一步:为什么成员变量为public时,也只与访问的变量类型有关?
用“子类的同名变量只是隐藏(hidden)了父类的同名变量”来回答觉得只是从形式上回答了。
Super sb = new Sub() 这里有个隐式强制转换,显式写就是: Super sb = (Super)new Sub();
因此问题转到强制转换:
System.out.println(((Super)new Sub()).v);
1. 强制转换怎么个转法,能把明明属于子类对象的实例变量v的值转为父类对象的Super?
2. 强制转换怎么处理重写方法?
当调用子类构造函数构建子类对象的时候,必然会先调用父类的构造函数,即构建一个父类对象(怎么得到这个对象?),因此父类的成员(变量和方法)也会被构建。 如果存在同名,内存中将会同时存在父类的同名成员和子类的同名成员。由于Java的多态性只针对方法来说的,成员变量不存在多态,因此成员变量只与访问的变量类型有关,而方法的调用遵从多态的规则。
1、首相要了解的知识是,成员变量绑定的是引用的类型,方法绑定的是对象的类型,
2、在继承中子类可以重写父类的方法,引用指向的是父类的对象就调用父类的方法,引用指向子类的对象就调用子类重写的方法,相反,成员变量看 的是引用的类型,父类型调用父类的成员变量,子类型调用子类的成员变量。
3、简单说 方法看对象,变量看类型。属性是静态绑定在类上,方法是动态绑定到对象上 。
- java继承中,成员变量的覆盖
- java继承中,成员变量的覆盖
- java继承中,成员变量的覆盖
- java继承中,成员变量的覆盖
- C++中继承的成员变量的覆盖/重写
- JAVA继承中,成员变量的访问
- 黑马程序员1——关于Java的继承过程中成员变量与方法的隐藏与覆盖
- Java成员变量的继承
- (25)继承中成员变量、函数中覆盖、构造函数的理解
- Java基础:第三十六讲 成员变量的继承与覆盖
- java继承中静态成员变量的初始化顺序
- java 继承中成员变量和方法的问题
- 继承中变量覆盖
- 继承 子类对父类成员变量的覆盖
- [Unity&C#&继承]unity继承中覆盖和隐藏基类成员变量 string 变量
- JAVA 继承 成员变量
- java成员变量的继承和隐藏
- C++继承中覆盖和隐藏基类成员变量或成员函数
- 枚举排列模板
- 【Github教程】史上最全github使用方法:github入门到精通
- Android Read Only File System IOException
- java内存系列:测试JDK最大内存
- magento soap api 列出所有的方法
- java继承中,成员变量的覆盖
- 将百度地图中模拟器和真机的.a文件打包成一个文件
- YARN学习笔记
- 怎样ubuntu下命令行终端显示短路径
- 修复系统引导项
- 集训
- 构造函数和析构函数
- 类型转换(.NET基础 )
- 欢迎大家来关注架构师分享网(www.imjcoder.cn)专注架构