2014-01-06 55 views
3

每當我定義的私有方法是這樣的:如何創建可在Dart的子類中重新定義的私有方法?

class ParentClass { 

    sayHi() { _initiateGreeting(); } 
    _initiateGreeting() { print("I'm a parent class"); } 

} 

這是不可能重新定義它的子類:如果我創建一個ChildClass的一個實例,並調用sayHi()方法

class ChildClass { 
    _initiateGreeting() { print("I'm a child class"); } // redefining the method 
} 

現在,那麼它是從ParentClass私有方法實際上被調用:

var child = new ChildClass(); 
child.sayHi(); // outputs "I'm a parent class" 

如果howev呃,_initiateGreeting()無處不在(也就是剝離_)然後調用child.sayHi()結果輸出I'm a child class

爲什麼?我如何重新定義一個私有方法,以便在子類中調用它?

回答

1

私人會員可以看作是圖書館會員。在圖書館內部,有或沒有預先下劃線的成員之間沒有區別。

因此,如果你在同一個庫中,你應該能夠重新定義子類中的方法。

+1

這很有趣。但是如果'ParentClass'屬於一個庫,那麼在文件頂部有''部分'語句來保存'ParentClass',而'ChildClass'不是該庫的一部分(這是諷刺的, 我的情況)? – snitko

+0

是否期望'ChildClass'不會在你的代碼片段中擴展'ParentClass'? ''的一部分不應該對隱私產生影響。 –

+1

我做了一些挖掘,看起來''聲明的一部分實際上影響着我是否可以重新定義私有方法:https://groups.google.com/a/dartlang.org/forum/#!msg/misc/ XZ0pqeqCeVs/j3QdGO_ZZmUJ – snitko

相關問題