- 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());
- }
- }
- 程序运行结果:
- 666
- 110
- zma
- 10000.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
|
-
a.png
(76.76 KB, 下载次数: 2)
m对象真实的情况
-
b.png
(72.14 KB, 下载次数: 2)
m对象刚开始理解的情况
|