Upload
frank-wang
View
61
Download
2
Embed Size (px)
Citation preview
OO
Object-oriented物件導向面向對向
OO基本特性封裝(Encapsulation)繼承(Inheritance)多型(Polymorphism)
封裝(Encapsulation)privateprotectedpublic少用萬惡friend沒說你能用你不能用
繼承(Inheritance)
在開始繼承之前....staticabstractvirtualoverriding順便講一下名字很像的overloading
static class無法用new 生成程式初始時就會被生成(時機不同語言不同)只包含靜態成員
static member不需要new也可以使用static method 亦同所以static method不能直接call non-static method
abstractabstract classabstract method
abstract class抽象class不能被用來生成物件,它只能被擴充(繼承)換言之你不能new 一個abstract class
abstract method一定要被子類別override無實作方法
virtual method(C++/C#)可以被子類別override(非必須)可以有實作方法更確切說,希望子類別override如果你寫Java,恭喜你
“ In Java, all non-static methods are bydefault "virtual functions." Only methods
marked with thekeyword final, whichcannot be overridden, along with private
methods, which are not inherited, arenon-virtual.
通常.....abstract跟virtual 用於定義base class但這只是通常,很多設計會違反這又是另外一個故事了,等以後再說
Overriding子類別覆寫父類別的函式函式名稱相同傳入參數相同回傳類別相同
Overloading相同函式名稱不同的參數數量
繼承(Inheritance)抽象化的手段子類別可以繼承父類別的能力直接使用父類別non private的屬性和方法
繼承的重點B 繼承 AB 一定要是A,但A不一定要是B
這不是鐵則,有時候也會違反
但這是一個判斷有沒有濫用繼承的重要指標
多型(Polymorphism)這個難搞了....一句話說完可以用父類別的指標執行子類別的特異化實作
還是直接看例子吧
來談談多重繼承
多重繼承一個子類別繼成多個父類別用不好會有很多問題(如鑽石繼承如果你寫C#/JAVA恭喜你不用關心這問題他們用一種超神的方法解決了多重繼承難題
就是根本不給你多重繼承
當上帝為你關起一扇門
同時也會為你開啟另一扇窗
Interface為了避免程度不好的PG亂用多重繼承(誤可以想成只有abstract method 的 abstract class只定義了方法C#中interface 也可以定義property
duck typing當看到一隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那麼這隻鳥就可以被稱
為鴨子。
PythonC#4.0 (dynamic)