java - 将父类(super class)的对象转换为子类——向下转型

标签 java oop

我知道转换实际上只能从子类到父类(super class)(向上转换)完成,但这个例子说明了我想做什么。

Class Super {}
Class Sub extends Super {}

Super super = new Super();
Sub sub = (Sub)super;

我相信这被称为“向下”类型转换,这是不允许的......

给定 Super 类型的对象,创建 Sub 类型对象的最佳方法是什么。

编辑:

这就是问题 - 将 Animal 转换为 Cat 的最佳方法是什么。

答案?从基本类型动物开始并将属性复制到猫。添加毛皮和尾部等。基本上是一个复制构造函数。这是正确答案(或好的答案)吗?

另一个编辑:

我认为我的问题很明确,但可能过于笼统。询问做某事的“最佳”方法往往会给出很多不同的回答。我意识到在不同的情况下最好的方法可能会有所不同。

我不是在寻找有关 Java 或 OO 基础知识的教程。只是征求意见,这样我就可以按照我使用最佳实践概述的方式解决这个问题。

最佳答案

CatAnimal

如果我给你一只动物(不一定是猫),你会如何把它变成一只猫?

编辑:

几乎任何事情都有办法做。大多数时候,你不应该这样做。我相信更好的设计会消除向下转型的需要。但您可以:

  • Super 中有一个构造函数,它接受一个 Sub 作为参数。

  • 实现 Super 的工厂,并有一个将 Sub 作为参数的方法。

我建议您扩展您的问题,准确地告诉我们您需要什么,因为我真的认为存在更优雅的解决方案。

关于java - 将父类(super class)的对象转换为子类——向下转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8758089/

相关文章:

java - HibernateTemplate findByExample 不返回任何结果

java - OpenGL 顶点着色器精度问题

java - 带有 Mongodb 源的 Spring 批处理项目读取器 : How to convert DBObject to a custom POJO in the ItemReader?

java - 如何计算具有3个坐标点的类的两个对象之间的距离?

jquery方式的Javascript继承

具有类设计的 C++ OOP

java - 树:根到叶的总和(递归)

java - 在访问、 key 的帮助下使用 jclouds 创建和下载 AWS ec2 key 对

php - 你能在一节课中扩展两个类吗?

vb.net - MustOverride 具有混合访问级别 Get/Set 的属性