封裝(encapsulation):封裝是乙個物件導向的概念,對外部世界,隱藏類的內部.
封裝優點:
1.好的封裝能減少耦合.
2.類的內部的實現可以自由改變.
3.乙個類有更清楚的介面.
data hiding(資料隱藏):封裝的乙個最有用的形式是資料隱藏.乙個類的資料表現乙個物件的狀態.
修飾符支援封裝:
private:只有類本身能訪問.
protected:類和派生類可以訪問.
internal:只有同乙個專案中的類可以訪問.
protected internal:是protected和internal的結合.
public:完全訪問.
other encapsulating strategy:(其他封裝策略)屬性和索引器的目的是封裝乙個類的細節和給類的使用者提供乙個公共的介面.
封裝和繼承的關係:
封裝的意思是包容(聚合),類與類之間的關係是"has a".乙個類裡面有另乙個類.
繼承,類與類之間的關係是"is a".
多型(polymorphism):就是怎樣過載乙個虛擬類.多型是物件導向的重要概念.
implementing polymorphism(實現多型):
例子:using system;
public class website
public website( string strsitename, string strurl, string strdescription )
public override string tostring()
}abstract public class contact
}public class customer : contact
}public class siteowner : contact
public new string updatenotify()
}public class test
/n",
((siteowner)poc).updatenotify());
}else
/n",
((customer)poc).updatenotify());}}
}}在例子中,contact類有個虛擬方法,有兩個派生類分別實現.使用了"new"關鍵字.
可以有更有效和優雅的方法,實現它,就是多型.
例子:using system;
abstract public class contact
}public class customer : contact
}public class siteowner : contact
public override string updatenotify()
}public class test
/n",
poc.updatenotify());}}
}例子中,派生類用"override"實現了多型.
虛擬方法是允許多型工作的基類的方法.用"override"修飾符說明,能被派生類過載.虛擬方法和抽象方法的不同
時,虛擬方法有實現,抽象方法沒有.抽象方法,隱式說明是虛擬,必須被過載;虛擬方法不必被過載.
多型,必須是虛擬方法,而且,方法的簽名必須一致,包括方法名稱,引數,和引數型別.
例子:abstract public class contact
}public class customer : contact
// error
public override string updatenotify(int number) {}// error
}例子中,sendmail不是虛擬方法,故錯誤;updatenotify,帶有不同的引數,故也錯誤.
new 和 override 修飾符,都可以實現新的方法.但,new 實現的是派生類新的方法.
例子:using system;
abstract public class contact
}public class customer : contact
}public class siteowner : contact
public override string updatenotify()
}public class test
/n",
poc.updatenotify());}}
}結果是:
message:
this is to let you know your site,
le financier, has been added as
a link to financial times.
message: web site change notification
例子中,customer 用"new"實現新的方法,但是,在執行是不是多型.仍然呼叫基類的方法.
most-derived implementations(多重派生實現)
polymorphic properties(多型的屬性):c#允許,屬性的多型實現.
例子:using system;
public class sitestats
abstract public class contact
set}
}public class customer : contact
",mystats.numberofvisits);
return name;
}set
", name);}}
}public class test
}例子中,抽象類,有屬性name,派生類過載實現了屬性.
polymorphic indexers(多型的索引器):索引器的多型.
例子:using system;
using system.collections;
public class sitelist
public int nextindex
}public virtual string this[int index]
set}
}public class financialsitelist : sitelist
set}
}class sitemanager
",mgr.sites[0].tostring());}}
例子中,基類的索引器是"virtual",派生類過載了索引器.
c 中物件導向的三個特徵多型 封裝 繼承
多型 多型小解 多型 同乙個訊息被 不同物件接收時,產生不同的行為,簡答說就是實現同乙個介面,不同方法。多型性 1 靜態多型性 要求在程式編譯時就知道呼叫函式的全部資訊,通過函式的過載實現2 動態多型性 在程式的執行過程中才動態的確定操作所針對的物件,通過虛函式來實現。虛函式 virtual 函式型...
物件導向的三個基本特徵是 封裝 繼承 多型
面試 你懂什麼是分布式系統嗎?redis分布式鎖都不會?封裝封裝最好理解了。封裝是物件導向的特徵之一,是物件和類概念的主要特性。封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。繼承物件導向程式設計 oop 語言的乙個主要功能就是 繼...
物件導向的三個特徵
1 封裝 封裝最好理解了。封裝是物件導向的特徵之一,是物件和類概念的主要特性。封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。2 繼承 物件導向程式設計 oop 語言的乙個主要功能就是 繼承 繼承是指這樣一種能力 它可以使用現有類的...