回答
你的代碼的工作:
package{
import flash.display.Sprite;
public class TestSuperClass extends Sprite{
public function TestSuperClass(){
super();
trace((new SuperClass).isSubclass); // Output : false
trace((new Extended).isSubclass); // Output : true
}
}
}
internal class SuperClass
{
public function get isSubclass() : Boolean{
return this is Extended;
}
}
internal class Extended extends SuperClass {}
你能做到動態(這是醜陋的,沒有表現友好的,但它的工作):
package{
import flash.display.Sprite;
public class TestSuperClass extends Sprite{
public function TestSuperClass(){
super();
trace((new SuperClass).isSubclass); // Output : false
trace((new SuperClass).superClass); // Output : Object
trace((new Extended).isSubclass); // Output : true
trace((new Extended).superClass); // Output : SuperClass
}
}
}
import flash.utils.describeType;
internal class SuperClass
{
public function get isSubclass() : Boolean{
return describeType(this)[email protected]() != "Object";
}
public function get superClass() : String
{
return describeType(this)[email protected]().split("::").pop();
}
}
internal class Extended extends SuperClass {}
它的工作原理,但不是一個很好的方式來設計代碼 – automaticoo
你是對的,我添加了一種動態的方式。我同意這個事實並不好,但你可以做到。 –
+1的方式來完成它。 – automaticoo
超類不知道他的子類,不應該知道。一個子類擴展他的超類,所以應該知道他的超類。
你試圖實現的是不可能的。應該有其他(更好的)方式來解決你的問題/架構。
超類可以知道他的子類 –
@Simsoft我不同意,我的意思是說,OP所要求的應該是可能的,但是編寫一個基類依賴於它的知識是不好的做法因爲您立即破壞了從該對象中隨意擴展的能力,而無需進入並修改它的代碼(不一定是真的,但它創造了這種可能性)。 – shaunhusain
這就是說確定它是可能的,但如果有人不明白我的意思,我不會真的建議它。 – shaunhusain
- 1. 如何檢查子類的類型?
- 2. 類型檢查的子類
- 3. 如何檢查類型是否是Python中的某個類型的子類型?
- 4. Swift:如何檢查子類上的基類和超類
- 5. 在Actionscript3中聲明泛型類(如Vector)
- 6. .NET:如何檢查通用類型類中的類型?
- 7. 在Scala中檢查ClassManifest的子類型
- 8. 子類型超類型去
- 9. 如何檢索python3中的類類型的子類?
- 10. 在java中創建超類的類型的子類對象
- 11. 如何從超類方法而不是超類類型返回子類型
- 12. 在函數中檢查Haskell類型類
- 13. 超類返回子類型
- 14. 檢查超類java.lang.Object中
- 15. 檢索基類中的子類型?
- 16. 如何檢查參數類的類型?
- 17. 類(類型)檢查
- 18. 如何檢查循環中的類型?
- 19. 如何檢查Qt中的C++類型
- 20. 超類型的hibernate查詢返回子類型的結果,如何僅返回超類型的結果?
- 21. 在ArrayList中將子類類型(Integer/String)插入超類類型(Object)
- 22. c#聲明子類爲類型超類
- 23. 如何在Java中使用超類型的泛型類?
- 24. 如何檢查類級方法是否在超類或Objective C中的子類中?
- 25. 如何在CodeIgnitor的DataMapper ORM中設置超類型和子類型關係?
- 26. 如何在抽象超類中使用子類中的方法
- 27. 如何在Python中的超類中調用子類方法
- 28. 如何在子類中忽略超類中的DataMember
- 29. 從子類(Java)設置超類中字段的類型
- 30. 應該在數據庫中使用子類型/超類型嗎?
你究竟在做什麼?可能比檢查基類的類型更好。 –
如果使用「is」關鍵字不起作用,那麼你編碼錯了。 –
我認爲這實際上會失敗,因爲「this」是在超類型中定義的代碼中的超類類型的「upcast」(我不完全確定這是因爲它沒有記錄,但我遇到了類似的行爲,我想知道是否在超類中創建該類的新實例會導致相同的問題,如果您嘗試這樣做,則不需要創建無限遞歸/循環)。 – shaunhusain