gpt4 book ai didi

Java继承-访问私有(private)变量/getClass()

转载 作者:太空宇宙 更新时间:2023-11-04 11:22:03 25 4
gpt4 key购买 nike

问题:以下代码的结果是“5 A”和“10 B”。为什么对于 b.print() 来说,this.num 是对 A 类对象的引用,而 this.getClass() 是对 B 类对象的引用?

父类(super class)A

public class A {
private int num;

public A(int num) {
this.num = num;
}

public void print() {
System.out.println(this.num + " " + this.getClass().getName());
}
}

B子类

public class B extends A {

public B(int num) {
super(num);
}
}

主要方法

A a = new A(5);
B b = new B(10);
a.print();
b.print();

最佳答案

这是两个不同的事情。

this.getClass() 或更简单的 getClass() (因为 this 暗示未指定)将始终引用实际的运行时类,该类可能是使用它的类或其子类。如果您从 A 调用它,它将返回 A 类,但如果您从它的子类调用它,它将返回该子类。

this.num 引用在 A 类中声明的特定实例字段。
当您在代码中引用此字段时,它必然依赖于声明此特定字段的类。

关于Java继承-访问私有(private)变量/getClass(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44804552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com