2009-12-11 99 views
0

請幫忙stackoverflow!我在AS3中有一個繼承自Interface類的MapInterface類。AS3類繼承問題

public class Interface extends Sprite { 
    public function Interface(){ 
     // do stuff 
    } 
} 

然後

import com.georgecrabtree.Interface; 

public class MapInterface extends Interface { 
    public function MapInterface(){ 
     addMapButtons(); 
    } 
    public function addMapButtons():void { 
     trace("init"); 
    } 
} 

這一切工作正常,當我從文檔類創建一個新的MapInterface類它描繪出初始化。但是,當我嘗試調用此:

var mapInterface:MapInterface = new MapInterface(); 
mapInterface.addMapButtons(); 

從主時間軸我得到這個錯誤:

1061: Call to a possibly undefined method addMapButtons through a reference with static type com.georgecrabtree:Interface. 

在此先感謝您的幫助,喬治

+3

命名您的類接口看起來是一個非常冒險的事情,接口(小寫字母i)是一個保留字。 – grapefrukt 2009-12-11 17:46:32

回答

0

如果我理解正確的問題,我認爲你的第二個代碼示例有一個錯字。我想象它居然是:

var mapInterface:Interface = new MapInterface(); 
mapInterface.addMapButtons(); 

的問題是,你的變量是Interface類型,它沒有定義addMapButtons()方法。您可以通過將變量類型更改爲MapInterface,或者通過在Interface中添加addMapButtons()方法並重寫MapInterface中的方法來解決問題。

+0

感謝您的幫助Richard,但當然如果MapInterface類擴展了Interface類,然後我將MapInterface var創建爲MapInterface,那麼它應該是MapInterface類型的?另外如果我在addMapButtons()之前追蹤變量trace(mapInterface);函數調用它的輸出窗口顯示它是MapInterface類型?! – supercrabtree 2009-12-11 17:10:22

+0

你原來的代碼看起來應該編譯給我。如果一個變量被輸入爲超類,那麼子類的屬性將不可用(除非將該變量轉換爲子類類型)。 – 2009-12-11 18:58:18

+0

那麼,supercrabtree的代碼確實有錯字? – LopSae 2009-12-12 11:20:06

0

嗨,大家好,感謝您的幫助和關注。經過一個良好的夜間睡眠,我終於明白了我的問題。顯然,我上面發佈的代碼是我實際上已經淡化的版本。

問題是我的文檔類沒有擴展Sprite,它擴展了一個名爲Installation的類,它本身擴展了Sprite。這是因爲我做了10次安裝,他們都有一堆共同點,他們都有一個屏幕保護程序,介紹視頻等。他們都有一個接口,這是我的問題出現的地方,因爲9個安裝使用相同的界面,但其中一個(地圖安裝)需要一些額外的GUI元素。

我的問題是,我安裝的基類這個樣子(IM呈現出下調版本):

public class Installation extends Sprite { 

    protected var _interface:Interface; 

    public function Installation(){ 
     //do stuff 
    } 
} 

所以,當我MapInstallation擴展這個類它繼承了_interface變量。所以,當我創建了_interface變量類型MapInterface ..

_interface = new MapInterface(); 

..the編譯認識到新MapInterface類型安裝的,但_interface變量仍強類型的接口,所以當我後來又嘗試過撥打_interface上的addMapButtons()函數,但函數在那裏編譯器有其他想法。我的解決方案是使用鑄造..

(_interface as MapInterface).addMapButtons(); 

它一切工作hunky dory。感謝您的幫助:)