簡體   English   中英

Java轉換對象

[英]Java casting objects

我有兩節課: TeacherCoordinator Coordinator擴展了Teacher

基本上,我想制作一個實例變量,該變量可以包含在Teacher實例或Coordinator實例中。

我知道只需編寫Teacher exp = new Teacher()Teacher exp = new Coordinator()可以輕松實現,但是當我這樣做時,我只能在應用new Coordinator()new Teacher()時訪問Teacher方法和屬性。 new Teacher()到正常的參考變量。 我的問題是,是否有另一種方式,我僅使用一個可以分配給Teacher或Coordinator對象的實例變量,並使用此變量來調用分配給對象引用變量的對象的任何屬性/方法?

您可以檢查exp是否為Coordinator然后強制轉換並相應地調用其函數:

if(exp instanceof Coordinator) {
    ((Coordinator)exp).foo();
}

如果您要執行幾項操作,則可以在本地范圍內創建變量並重復使用:

if(exp instanceof Coordinator) {
    Coordinator expCoord = (Coordinator)exp;
    expCoord.foo();
    expCoord.bar();
    expCoord.baz();
}

除非您要調用的所有方法都存在於父類中,否則無法這樣做。

您可以將Teacher變量中的內容強制轉換為Coordinator,但是如果Teacher變量中的內容不是真正的Coordinator對象實例,它將失敗。

((Coordinator)exp).coordinate();

每當您要調用Coordinator的方法時,都必須首先將對象強制轉換為Coordinator

((Coordinator)myTeacher).coordinatorMethod();

不,因為類型安全。 但是您可以隨時執行以下操作:

Teacher exp = new Coordinator()
((Coordinator)exp).someCoordinatorMethodOrProperty()

是的,你是對的,

這里相同的概念作為父子關系實現,因為子類的實例可以訪問子代以及父代的屬性,但是父類的實例只能訪問子類的屬性...

這就是為什么它正在發生。

暫無
暫無

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

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