簡體   English   中英

VisualWorks Smalltalk-無法訪問父級的方法

[英]VisualWorks Smalltalk - can't access parent's methods

我在類繼承方面遇到問題-我有兩個這樣定義的類:

Smalltalk defineClass: #Field
superclass: #{Core.Object}
indexedType: #none
private: false
instanceVariableNames: 'name type '
classInstanceVariableNames: ''
imports: ''
category: ''

Smalltalk defineClass: #CheckBox
superclass: #{Smalltalk.Field}
indexedType: #none
private: false
instanceVariableNames: 'checked '
classInstanceVariableNames: ''
imports: ''
category: ''

在類“字段”中,我有一個方法setName:

setName: n
name := n.
^n

對於這樣的事情,它工作得很好:

|tmp|
tmp := Field new.
tmp setName: 'fancy name'.

,但是在上例中將“字段”更改為“ CheckBox”時,總是得到“未處理的異常:MessageNotUnderstood:#setName:”。 你們知道我應該如何讓我的子類從其父類繼承setName:方法嗎? 我試圖在任何地方找到答案,但到目前為止還沒有運氣。

編輯:完整的錯誤消息是: 錯誤訊息1錯誤消息2

不知何故,您的CheckBox類沒有得到編譯。 檢查拼寫。 確保沒有名為CheckBox的現有類。 確保您可以在瀏覽器中看到CheckBox類。

有點麻煩-在工作區窗口中,轉到“變量”選項卡,並確保沒有名為CheckBox的變量。 如果是這樣,請將其刪除,然后重試。

好的,這是我的問題的答案:我很愚蠢。 我在弄亂我的CheckBox初始化方法,並在最后意外刪除了^ self行。 將其放回原處后,一切正常。 大衛,感謝您的幫助,也很抱歉抽出寶貴的時間。

我在Checkbox類上看不到#initialize方法,
但是由於某種原因,答案是零。

當您更改最后一行時,它會回答自己,
您還更改了導致方法回答nil的所有內容。

刪除回答nil的行也可以。

如果您像這樣編寫#new方法,則可以避免此問題-

>>new
      ^self basicNew
          initialize
          ; yourself

因此您將始終獲得新實例,
而不是這樣-

>>new
      ^super new initialize

這樣你總是得到什么
#initialize方法正好回答。

暫無
暫無

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

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