父子实例的内存控制--继承成员变量和继承方法的区别
来源:互联网 发布:深宫遗梦 知乎 编辑:程序博客网 时间:2024/06/06 00:23
实例代码:
package com.Filed;class Base{int count=2;public void display(){System.out.println(this.count);}}class Derived extends Base{ int count=20;@Overridepublic void display() {// TODO Auto-generated method stub System.out.println(this.count);}}public class FieldAndMethodTest {public static void main(String[] args) {/* * 程序一 */ //声明并创建一个Base对象Base b = new Base();//直接访问count实例变量和通过display访问count实例变量System.out.println(b.count);b.display();/* * 程序二 *///声明并创建一个Derived对象Derived d = new Derived();//直接访问count实例变量和通过display访问count实例变量System.out.println(d.count);d.display();/* * 程序三 *///声明一个Base变量,并将Derived对象赋给该变量Base bd = new Derived();//直接访问count实例变量和通过display访问count实例变量System.out.println(bd.count);bd.display();/* * 程序四 *///让d2b变量指向原d变量所指向的Dervied对象Base d2b = d;//访问得d2b所指对象得count实例变量System.out.println(d2b.count);}}
结果:
2
2
20
20
2
20
2
# 实例分析
程序一和程序二的调用一目了然,就不过多分析了,看看程序三和程序四。
程序三的代码声明了一个Base变量bd,却将一个Dervied对象赋给该变量,此时的系统将会自动进行向上转型来保证程序正确。直接通过db访问count实例变量,输出的将是Base(声明时的类型)对象的count实例变量的值;如果通过db来调用display()方法,该方法将表现出Dervied(运行时类型)对象的行为方式。
程序四的代码直接d变量直接赋值给d2b,只是d2b变量得类型时Base。这意味着d2b和b两个变量指向同一个Java对象,因此如果在程序中判断d2b==b,将返回true。但是,访问d.count时输出20,访问d2b.count时却输出2。这表明:d2b,b变量所指向得Java对象包含了两块内存,分别存放值为2的count实例变量和值为20的count实例变量
# 总结:
不管是d变量,还是bd变量,d2b变量,也不管声明它们时用什么类型,只要它们实际指向一个Dervied对象,当通过这些变量调用方法时,方法的行为总是表现出它们实际类型的行为;但如果通过这些变量来访问它们所指的对象的实例变量,这些实例变量的值总是表现出声明所用类型的行为。由此可见,Java继承在处理成员变量和方法时是有区别的。
0 0
- 父子实例的内存控制--继承成员变量和继承方法的区别
- java 父子实例的内存控制 继承变量和继承方法的区别
- Java父子继承实例的内存控制
- java 继承成员变量和继承方法的区别
- 继承成员变量和继承方法的区别
- 继承成员变量和成员方法的区别
- 如何理解继承成员变量和方法的区别?
- 继承成员与继承方法的区别
- 关于JAVA继承类的静态变量、成员变量、父子类构造方法调用顺序的探讨
- 关于JAVA继承类的静态变量、成员变量、父子类构造方法调用顺序的研究
- [疑问]继承中的方法和成员变量的调用
- java 继承中成员变量和方法的问题
- 父子实例的内存控制
- java成员变量的继承和隐藏
- 父子bash的环境变量和自定义变量继承问题
- java基础(八)Math/代码块/继承成员方法指南的关系/继承中成员变量之间的关系/方法的重写/继承中构造方法之间的关系/this和super的区别
- java中的成员方法与成员变量的继承
- java中的成员方法与成员变量的继承
- 简单的MyBatis demo之数据库增删改查
- 【codevs3369】膜拜(dp)
- ionic生成应用图标和启动页
- 0.使用Qemu运行OP-TEE
- 常对象 常对象成员 知识点
- 父子实例的内存控制--继承成员变量和继承方法的区别
- MySQL数据库的基本操作
- 进程位置
- ionic--初级学习button
- epoll_wait的LT 和 ET事件处理模式
- redis持久化原理详解
- Linux下cocos环境搭建.
- Go语言并发
- MongoDB学习之路