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

标签 java inheritance this

问题:以下代码的结果是“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/

相关文章:

java - 在 Jsoup 中将 HTML 标签写为字符串

java - 在java中如何扩展接口(interface)的实现?

javascript - 访问方法时出现问题

java - "this"在这样的类之后如何使用?

java - 如何在新类的静态 main 中打印非静态方法?

java - 无符号右移运算符与普通右移运算符一样工作,为什么?

java - 在 List 内的 String[] 中查找值并删除 String[]

c++ - 元类会取代继承吗?

variables - VB6成员变量继承

javascript - jQuery 在 keyup 上使用类获取输入 ID 不起作用