java - 类型转换和由此产生的后果 [Java]

标签 java casting

<分区>

在下面的 main 方法中使用强制转换词“(SuperClass)”有什么作用? 这会改变对象类型吗?

class SuperClass{
  public void method(){
    System.out.print("SuperClass");
  }
}

class Sub extends SuperClass{
  public void method(){
    System.out.print("SubClass");
  }
}

public class SubSub extends Sub{
  public static void main(String args[]){
    ((SuperClass)new SubSub()).method();
  }
  public void method(){
    System.out.print("SubsubClass");
  }
}

最佳答案

转换不会改变对象类型。它只是告诉编译器以不同的方式处理对象。也就是说,它更改了对象引用。

这里,虽然对象引用是 SuperClass ,但对象仍然是 SubSub 类的对象,所以会调用 SubSub 类的 method() 。这也称为运行时多态性。即使用父类的引用指向其子类的一个对象。

关于java - 类型转换和由此产生的后果 [Java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47650093/

相关文章:

c++ - 模板类的转换

postgresql - 将 bytea 列转换为 OID,同时保留值

android - 完整性检查 - Android 模拟器中的 Cast 图标

java - 无法导入包 org.springframework.messaging 并使用 MessageHandler 接口(interface)

java - 在 Java 中验证 Mac 本地用户

java - 在 Java 中将 DOM 节点呈现为字符串而不指定 namespace

java - 为什么从堆栈到 int 的转换没有在 Java 中运行?

c# - 通用类型转换

java - GWT如何在UiBinder中创建ul li小部件?

java - 触发垃圾收集以衡量 Web 应用程序的性能