簡體   English   中英

Java中的對象切片

[英]Object slicing in Java

您是否可以采用子類對象,然后以某種方式將其轉換為與父類相同類型的對象,同時切片不屬於父類的所有字段?

我知道您可以用C ++做到這一點,但是我不知道如何用Java做到這一點。

您無法在Java中更改對象的運行時類型(盡管您可以將對超對象的引用和對象分配給父類型,然后又將其轉換回子類型)。 您將需要構造超類運行時類型的新對象。

我通常會建議所有類都應該是抽象類或葉子類(概念上是final ,如果出於實用原因未真正標記為類)。

嘗試這個:

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); 並且您將獲得所需的結果,但是正如其他人所評論的那樣,這將不是轉換 ,而是構造一個全新的對象。

Java中沒有直接的切片模擬,但是我敢肯定,您可以通過將成員函數添加到父代或子代中為您創建一個新的父實例的方式來模擬這種情況。

我還沒有在Java中看到類型切片。 而且我認為沒有太多需要...

您可以隨時使用Java進行此操作

Object x = new String("hello");

在這里,您將沒有String類提供的所有功能

我不確定為什么要這樣做,但是可以讓兩個類實現相同的接口,然后通過該接口引用對象。 例如:

A類實現了一些...
B類實現了一些...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM