一文彻底搞懂父类引用指向子类对象问题

简介: 一文彻底搞懂父类引用指向子类对象问题
public class Father {
  private String name;
  private int age;
  private int weight;
  public void eat() {
    System.out.println("Father is eating");
  }
  private void run() {
    System.out.println("Runing....");
  }
  public Father() {
    name = "zhangsan";
    age = 23;
    weight = 60;
  }
  public static void main(String[] args) {
    /*
     *
     *如果子类的构造方法中对继承来自父类的变量重新赋予新的值的话,那么这样子调用的将会是子类的变量
     *如果子类重新定义了和父类一样的变量的话那么这样将会输出的是父类的变量  
     *Father f = new Son();
     *f.age f.weight
     */
    Father f = new Son();
    f.eat();
    f.run();
    System.out.println("。。。。。。年龄是:" + f.age + "\t" + f.weight + "\t" + f.name);
//    Son s = new Father();这样子会报错
  }
}
class Son extends Father{
  private int salary;
  public void eat() {
    System.out.println("Son is eating");
  }
  public void sleep() {
    System.out.println("sleep ....");
  }
  public Son() {
    name = "lisi";
    age = 3;
    salary = 60;
    weight = 70;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
}

最终输出的结果

f.eat()输出的是子类中重写父类中的eat()方法

f.run()输出的是父类中的run()方法(实际上是输出的子类中的,只是因为子类中没有重写,所以看上去输出的是父类中的,实际调用的是子类的)

f.age和f.weigth输出的是子类的构造方法中重新赋值的

f.name输出的是父类中的属性

由此可以看出,父类引用指向子类对象,最终这个父类引用所拥有的变量是是子类中的(如果构造方法中没有重新赋值那就和父类中的一样,如果重新赋值了那就是子类中赋值以后的),方法也是子类中的(如果重写了就是重写之后的方法,如果没有重写的那就和父类中的一样)


相关文章
|
4天前
|
设计模式 算法 数据安全/隐私保护
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用(二)
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用
29 0
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用(二)
|
4天前
|
存储 算法 编译器
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用(一)
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用
71 0
|
4天前
|
Java
java 父类引用指向子类对象
java 父类引用指向子类对象
27 0
|
10月前
|
存储 编译器 C语言
【C++学习】类和对象 | 类的成员函数存放在哪里?| this指针 | 构造函数 | 析构函数 | 探索构造和析构函数的更多细节
【C++学习】类和对象 | 类的成员函数存放在哪里?| this指针 | 构造函数 | 析构函数 | 探索构造和析构函数的更多细节
150 0
|
10月前
|
存储 编译器 C++
<c++> &引用概念 | 引用用法 | 引用与指针区别
<c++> &引用概念 | 引用用法 | 引用与指针区别
149 0
|
12月前
方法引用符、引用类方法、引用对象的实例方法、引用类的实例方法及引用构造器
方法引用符、引用类方法、引用对象的实例方法、引用类的实例方法及引用构造器
71 0
为什么要初始化父类属性?底层原理是什么?
为什么要初始化父类属性?底层原理是什么?
141 0
|
存储 C++ 开发者
你还不进来看看C++类与对象【7】 —— 动态多态底层原理剖析&&(纯)虚析构解决父类指针不能释放子类属性问题嘛
你还不进来看看C++类与对象【7】 —— 动态多态底层原理剖析&&(纯)虚析构解决父类指针不能释放子类属性问题嘛
111 0
你还不进来看看C++类与对象【7】 —— 动态多态底层原理剖析&&(纯)虚析构解决父类指针不能释放子类属性问题嘛
|
存储 编译器 C语言