java - 在 Java 中向上转换有问题吗?

标签 java polymorphism upcasting

谁能解释一下为什么会这样:

class Apple {

   String type;

   setType(){
      System.out.println("inside apple class");
      this.type = "apple";
   }

}

class RedApple extends Apple {

    String type;

    setType() {
      System.out.println("inside red-apple class");
       this.type = "redapple";
    }
}

int main {

    RedApple red = new RedApple();
    Apple apple = (Apple) red;
    apple.setType();

}

但是产生的输出是:

"inside red-apple class”

为什么 .setType() 方法执行子类方法,而不是父类(super class)方法,即使我是向上转型,正如所见?

最佳答案

那是因为这就是多态性在 Java 中的工作方式:它总是使用该方法的最派生版本,覆盖其他版本。获取基类版本的唯一方法是在最派生覆盖中使用 super.setType

关于java - 在 Java 中向上转换有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6729039/

相关文章:

java - BigDecimal 舍入问题

java - 响应不包含值时的 JSON 解析问题

java - 'createVideoThumbnail(String, Int) : Bitmap? ' 已弃用。在 Java 中已弃用

java - 添加到 ArrayList 时是否会转换对象?

c++ - upcasting 和 vtables 如何协同工作以确保正确的动态绑定(bind)?

java - 扩展 Java 类并强制现有库使用扩展类

java - 如何在图像上放置 JButton?

C++ 纯虚void

C++ 虚拟覆盖函数链接器错误

c++ - 为什么 C 样式转换允许您转换为私有(private)基类?