先占個坑,明天有空過來談談對這個問題的看法。我來了!撒花~撒花~不知道我是否理解對了樓主的問題,暫時就我所理解的來說說自己的看法,重在交流嘛~~為了節省時間和篇幅,下文用OO來代替“面向對象”,請自行在大腦中運行replace()。首先,開閉原則是OO編程思想中的一個重要原則,既然是OO領域的,自然大前提是針對OO語言下的編碼實踐。同樣,OO語言為我們提供了3大基本特性:抽象、封裝、多態。這是所有OO語言所共通的,如果某個語言沒有提供這3大特性就聲稱自己是OO語言,毫無疑問會被人一巴掌糊一臉翔!能夠在運行時動態確定對象的類型是一種語言實現多態的前提。同樣,如果一種OO語言無法在運行時確定對象的類型就說自己實現了多態,毫無疑問會被人一巴掌糊一臉翔!一種OO語言如何實現多態,根據語言的不同方式也不同。但總體來說,必然需要定義某種數據結構,其中記錄著每個運行時對象的相關信息(對象的類型只是其中之一)。每個對象在創建時都會同時生成該結構的實例并且用對象的相關信息填充其中的字段。這樣一來,只需查詢該結構就可以獲得對象信息了。這是語言實現層面的東西,與我們程序員無關,我們只需要知道OO語言提供了這種功能就好。下面再來談談打印機和print()的問題。我想Output類必然具有以下結構:Printerprinter=a_printer_instance;voidoutput(content){printer.print(content);}其中,實際的打印機對象a_printer_instance是在運行時創建的,雖然創建方式可能不同(直接創建、通過工廠、反射、外部注入等等),但可以肯定的是,Output對象所拿到的是一個實實在在的打印機對象,是3種打印機類型之一。而且前面說過,只要存在一個對象,OO語言就能夠獲得它的運行時類型。所以等到執行output()方法中的打印語句時,必然可以找到正確的print()方法實現,進而正確打印出內容來。僅就多態這一點來說,實現起來并不復雜。用C也可以很容易地實現(使用函數指針)。OO比面向過程更先進的地方體現在它同時實現了抽象、封裝、多態三種特性,從而簡化了軟件開發過程。不知不覺寫了一大段,到此住筆吧~共勉~