java对象中必有一个父类对象
来源:互联网 发布:控制微信摇骰子软件 编辑:程序博客网 时间:2024/06/07 03:44
子类对象中必有一个父类对象,想必大家会说你疯了吧,怎么可能?
那么请听我慢慢道来!
下面是一个程序
package cn.up.demo5;public class Employee {private String name;private String job_number;private double salary;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getJob_number() {return job_number;}public void setJob_number(String jobNumber) {job_number = jobNumber;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}}package cn.up.demo5;public class Manager extends Employee {private String bonus;public String getBonus() {return bonus;}public void setBonus(String bonus) {this.bonus = bonus;}}package cn.up.demo5;public class Test {/** * @param args */public static void main(String[] args) {Manager m = new Manager();m.setBonus("666");m.setJob_number("110");m.setName("zma");m.setSalary(10000);System.out.println(m.getBonus());System.out.println(m.getJob_number());System.out.println(m.getName());System.out.println(m.getSalary());}}程序运行结果:666110zma10000.0
看到程序运行结果,大家会下意识的想到:额,不是这样吗,是这样的啊,别扯了,你说的子类对象中怎么会有一个父类对象。
这是我的解释:
依据大家的理解Manager类继承自Employee类,那么除了私有的成员变量其他的都继承下来了,那么Manager对象里面的结构应该是这样的
额,问题就来了,我调用m.setBonus("666");m.setJob_number("110");m.setName("zma");m.setSalary(10000);这些方法,调用
m.setBonus("666")还可以理解,但是调用另外的3个方法,m对象把值赋到什么地方去了,m对象不是没有name,job_number,salary这些成员变量的吗
还更奇怪的是,当我执行System.out.println()打印的时候这些值又出现了。
正式开始之前:我想问大家一个问题?构造函数的出现是不是都伴随着对象的创建,为什么构造函数的第一句代码都要是super.父类的构造函数
如果有3个层次继承关系,那么当我new一个孙子对象时,孙子对象的构造函数的第一句是不是要调用父亲的构造函数,而父亲的构造函数的第一句是不是要调用
爷爷的构造函数,这样就形成了构造方法的层级调用,于是,先创建爷爷对象,再创建父亲对象,再创建孙子对象,于是上面的m对象就应该是这种形式
当我们m.setJob_number("110")时,先看子类对象有没有对应的方法,如果没有就去看父类中有没有(多态就是这样形成的),因为setJob_number方法是pubic类型的
所以m.setJob_number("110")方法是其实是调用了子类中父类的方法,父类的方法是能够访问其中的私有的成员变量的
同理,当我们m.getJob_number()也是一样的道理
当然了这些图可以形象的描述继承的关系(实际情况可能不是这样的)但是通过这种画图的方式可以得到正确的结果
希望同大家一起讨论java技术
- java对象中必有一个父类对象
- Java子类对象中必有一个父类对象2
- Java输出一个对象
- java 对象转换成另外一个类对象 泛型
- Java中创建一个子类对象会不会创建父类对象?
- java父类对象指向子类对象
- Java: 如何访问一个对象
- Java深度拷贝一个对象
- java序列化一个对象
- 定义一个类、对象
- java继承,多态方面的一个问题,定义一个父类对象,用子类new
- 一个简单的java对象序列化工具类
- 一个菜鸟对 java 类和对象的理解
- java -- 判断一个对象所属于的类
- Java中直接输出一个类的对象
- Java对象与类中的一个小练习
- java中判断一个类的对象是否相等问题
- java 类的实例 new一个对象初始化顺序
- 对M4芯片的CRC模块改造来计算标准CRC32
- 黑马程序员——内存管理
- boost.utility的base_from_member
- Incorrect key file for table ‘/tmp/#sql_bd2_0.MYI’解决
- BroadLeaf项目搜索功能改进
- java对象中必有一个父类对象
- 递归输出vecotr
- Android调节声音的基本步骤
- 理解ThreadLocal
- linux grep命令详解
- JQuery DataTables 列自定义数据类型排序
- 通过二维码进行产品促销
- 支付宝,网银在线,快钱 3大支付接口的集成与对比,统合实现
- HDU 5056 - Boring count