gpt4 book ai didi

java - 从子类对象使用父类(super class)的 getClass 方法

转载 作者:行者123 更新时间:2023-12-02 10:46:26 26 4
gpt4 key购买 nike

我一共有三门课。主要,动物(父类(super class))和猫(子类)。当我尝试调用whatIsTheClass()方法时,我不明白输出“Cat”。我期待看到输出“动物”。我之所以期望输出“Animal”,是因为我相信方法 WhatIsTheClass() 是从 Animal 对象而不是 Cat 对象调用的,因为子类不包含此方法。

主类:

package com.example.java;

public class Main {

public static void main(String[] args) {
Animal cat = new Cat();
}

}

猫类:

package com.example.java;

public class Cat extends Animal {

public Cat() {
super();
whatIsTheClass();
}

}

动物类别:

package com.example.java;

public class Animal {

public void whatIsTheClass() {
System.out.println(this.getClass().getSimpleName());
}

}

我的理解是,在继承中,子类不会复制父类(super class)的方法。如果子类对象中没有定义被调用的方法,则会在父类(super class)对象中查找被调用的方法。如果调用的方法是在父类(super class)对象中定义的,则将从那里调用该方法。在这种情况下,因为子类没有定义它自己的whatIsTheClass()方法,所以它必须使用父类(super class)对象中定义的whatIsTheClass()方法。但是如果从父类(super class)对象调用whatIsTheClass(),为什么它返回子类的名称而不是父类(super class)的名称?

最佳答案

方法 whatIsTheClass 可以在 Animal 中定义,但在哪个类的代码中调用 getClass() 没有区别。这一切都与对象的运行时类型有关,如 Javadocs for getClass() 中所述。 :

Returns the runtime class of this Object.

cat指定的对象的运行时类型是Cat

这也是为什么没有类必须重写 getClass() 才能返回正确的 Class 对象。 (无论如何,getClass() 方法是final。)

关于java - 从子类对象使用父类(super class)的 getClass 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52525209/

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