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

简介: 一文彻底搞懂父类引用指向子类对象问题
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输出的是父类中的属性

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


相关文章
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
76 4
|
2月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
56 1
|
7月前
|
存储 编译器 程序员
【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)
【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)
|
7月前
|
Java
java 父类引用指向子类对象
java 父类引用指向子类对象
56 0
方法引用符、引用类方法、引用对象的实例方法、引用类的实例方法及引用构造器
方法引用符、引用类方法、引用对象的实例方法、引用类的实例方法及引用构造器
95 0
|
存储 编译器 C语言
【C++学习】类和对象 | 类的成员函数存放在哪里?| this指针 | 构造函数 | 析构函数 | 探索构造和析构函数的更多细节
【C++学习】类和对象 | 类的成员函数存放在哪里?| this指针 | 构造函数 | 析构函数 | 探索构造和析构函数的更多细节
217 0
|
存储 C++ 开发者
你还不进来看看C++类与对象【7】 —— 动态多态底层原理剖析&&(纯)虚析构解决父类指针不能释放子类属性问题嘛
你还不进来看看C++类与对象【7】 —— 动态多态底层原理剖析&&(纯)虚析构解决父类指针不能释放子类属性问题嘛
140 0
你还不进来看看C++类与对象【7】 —— 动态多态底层原理剖析&&(纯)虚析构解决父类指针不能释放子类属性问题嘛
关于纯虚函数继承子类 ,父类指向子类后 将父类指针转为子指针,就可以调用子类其他接口
关于纯虚函数继承子类 ,父类指向子类后 将父类指针转为子指针,就可以调用子类其他接口
关于纯虚函数继承子类 ,父类指向子类后 将父类指针转为子指针,就可以调用子类其他接口
C#(十六)之C#类中的成员属性 构造函数 析构函数
本篇内容记录了成员属性、构造函数、析构函数的一些基本用法。
307 0
C#(十六)之C#类中的成员属性 构造函数 析构函数