gpt4 book ai didi

java - this 指的是在子类对象上调用非重写方法时会发生什么?

转载 作者:行者123 更新时间:2023-12-01 19:58:02 25 4
gpt4 key购买 nike

考虑以下代码:

class Person {
String className = "Person";

void printClassName () {
System.out.println("I am " + this.className);
System.out.println("I am " + this.getClass().getSimpleName());
}
}

class Employee extends Person {
// intentionally hiding this field
String className = "Employee";
}

public class App {
public static void main(String[] args) {
Employee raghu = new Employee ();
raghu.printClassName();
}

}

我有几个问题。

  1. 创建子类的对象时,实际创建了多少个对象?只有一个,通过引入子类中定义的新属性来扩展父类(super class)的属性?或者两个,我们可以访问的子类对象和一个对我们隐藏的父类(super class)对象?

  2. 如果创建了两个对象,当在子类对象上调用非重写方法时,哪个对象负责?换句话说,在非重写方法中 this 指的是什么?隐藏的父类(super class)对象还是子类对象?

  3. 如果你对#2的答案是父类(super class)的隐藏对象,那么为什么上面的代码会打印 "I am Employee" for System.out.println("I am "+ getClass().getSimpleName()); 位于 printClassName 内。

  4. 如果#2 的答案是子类的对象,那么为什么 printClassName 中的第一行打印 “I am Person”

最佳答案

您将变量声明为 Employee 类型

this.className

指的是该类中的className

this.getClass().getSimpleName()

this.getClass() 返回类 Employee,因为这就是您声明变量的方式,这就是 getSimpleName() 返回的原因“员工”

关于java - this 指的是在子类对象上调用非重写方法时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48809096/

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