簡體   English   中英

可以添加可以轉換為現有最終課程的新課程嗎?

[英]Possible to add a new class that can be cast to an existing final class?

我在庫中定義了A類:

 public final class A {blah}

然后,我想使用新的B類替代它來破解它:

A a = new A();  
A a = (A) new B();

B具有A中的所有方法和成員,因此這樣做實際上是安全的,我可以在C ++中做到。 但是對於Java,這種轉換將導致異常。 那么在Java中是否有任何變通方法或黑客手段可以做到這一點? 另外,有沒有一種方法可以在不接觸虛擬機的情況下進行入侵?

雖然B擁有所有的方法和屬性的劑量A有,你不能施放的對象B到的參考A 這意味着-

A a = (A) new B(); 

除非B擴展A否則無效。

而且這里A是最后一堂課,因此您不能將A乘以B 您必須使A非決賽,而B必須使A延伸。那么上述強制轉換將有效。

Java的final關鍵字存在以防止子類化,因此簡單的答案是no 您可以使用PowerMock之類的工具來執行此類操作。 我不會在測試之外做。

這是不可能的,因為您的A類是最終的。 最終課程只是無法擴展的課程。

暫無
暫無

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

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