Java中的对象切片

时间:2010-03-25 18:22:02

标签: java type-slicing

您是否可以使用子类对象并以某种方式将其转换为与父类相同类型的对象,同时切片不属于父类的所有字段?

我知道你可以用C ++做到这一点,但我不知道如何用Java做到这一点。

5 个答案:

答案 0 :(得分:5)

您无法在Java中更改对象的运行时类型(尽管您可以为超类型分配对象和对象,并转换回子类型)。您需要构造一个超类运行时类型的新对象。

我通常建议所有类都应该是抽象的或叶子的(概念上final,如果由于实际原因没有实际标记为这样)。

答案 1 :(得分:4)

试试这个:

class Parent {
    private int fieldA;

    Parent(int fieldA) {
        this.fieldA = fieldA;
    }

    Parent(Parent object) {
        this.fieldA = object.fieldA;
    }
}

class Child extends Parent {
    private int fieldB;

    Child(int fieldA, int fieldB) {
        super(fieldA);
        this.fieldB = fieldB;
    }
}

然后你可以做Parent parent = new Parent(child);这样的事情,你将获得所需的结果,但正如其他人评论的那样,这不是转换,而是构建一个全新的对象。

答案 2 :(得分:0)

在Java中没有直接的切片模拟,但我确信你可以通过向父或子添加一个成员函数来模拟这个,这将为你创建一个新的父实例。

答案 3 :(得分:0)

我还没有在Java中看到类型切片。而且我认为不需要它......

您可以随时在Java中执行此操作

Object x = new String("hello");

这里你将没有String类提供的所有函数

答案 4 :(得分:-1)

我不确定你为什么要这样做,但你可以让两个类实现相同的接口,然后通过接口引用对象。例如:

  

A类实现了某些东西......
  B级实现了一些......

something = new A();    
something = new B();