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

标签 java oop inheritance polymorphism

我一共有三门课。主要,动物(父类(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/

相关文章:

java - 如何通过 JNI 设置 Java 类的 Double/Integer 类型的值

java - 为什么嵌套类的对象不能用作父类(super class)型构造函数的参数?

javascript - 我应该从 HTMLProps<HTMLElement> 继承 react Prop 吗?

inheritance - GORM,继承的模型,递归链接

java - Vertx 代码生成失败 - ARRAY 类型非法类型 java.lang.String[]

java - 尝试上传图片但收到此错误 Android 应用程序

java - java 中的 Entry<K,V> 数组如何工作?

c++ - 类的初始化没有匹配的构造函数

Scalaz 实例化类型类和案例类

javascript - 在 meteor.js 中使用继承