MatrWe 2023-11-30 23:35 采纳率: 100%
浏览 7
已结题

【Java】Java实例调用父类方法打印变量相关问题

代码如下,一个父类Muman,一个子类Student,一个测试类Main

Human类

package com.matrwe;

public class Human {
    public int age = 1;
    public void getAge(Student student) {
        System.out.println(this.age);
        System.out.println("this是否就是student实例:" + (this == student));
    }
}

Student类

package com.matrwe;

public class Student extends Human{
    public int age = 0;
}

测试类

package com.matrwe;

public class Main {
    public static void main(String[] args) {
        Student student = new Student();
        student.getAge(student);
        System.out.println(student.age);
    }
}

结果

img

可以看到我在测试类当中调用了父类的getAge方法,因为子类没有重写,所以调用的是父类的方法
而在方法中我输出了this.age(其实就等于直接写age,因为参数列表没写age)
Java中的this指向方法的调用者,也就是测试类中实例化的student,我也在方法的参数中传入了student和this进行比较进一步确认了这一点
所以说这段代码的意思就是输出student实例的age
我们再看测试类中输出的student实例的age,结果是0
而调用的getAge方法输出的却是1
按照this的定义这里输出的两个结果不应该都是0吗

img

这是我画的内存图,因为student是用Student类型接受的,因此调用student中的变量时应该先到堆空间的左半部分寻找也就是0
下面的System.out.println(student.age);也证明了输出结果就是0,实例对象会优先寻找自身的age
但是getAge方法输出的结果却是1,按理说方法中的this.age指的就是方法调用者student的age应该就是0,为什么输出的却是1
(不要说就近原则,这只是一个记忆方式,我想要知道的是原理)

  • 写回答

3条回答 默认 最新

  • Huazie 全栈领域优质创作者 2023-12-01 00:21
    关注

    父类的方法,无法直接访问子类的成员变量和方法。
    就是说 ,父类中的 this指针只能引用当前类的成员变量和方法,而无法直接访问子类的成员变量和方法
    你在父类中,通过this 引用了同子类相同的变量,那这个变量肯定是 父类自己的,因为它访问不了子类的成员变量。
    student 这个是子类实例,能直接访问 自己的age。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月9日
  • 已采纳回答 12月1日
  • 创建了问题 11月30日

悬赏问题

  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件