這是這個(gè)系列的第二篇。在第二篇里,我決定講一講封裝。
程序的不同部分應(yīng)該用封裝去互相隔離,模塊之間應(yīng)該不應(yīng)該產(chǎn)生很隨意的關(guān)聯(lián)。
可能有的人覺得不解,又或覺得是有道理的廢話,不急,先一步一步來(lái)。
我們先來(lái)看看面向?qū)ο蟮娜齻€(gè)基本特征是什么?
繼承
多態(tài)
封裝
如果你是科班畢業(yè),這6個(gè)字應(yīng)該是你第一次學(xué)到類(class)的時(shí)候就聽老師說(shuō)了。
我們老師的話大概是這樣的:
在類里面,封裝就是通過(guò)一些手段來(lái)限制類外部的訪問(wèn),依此隔離出類相對(duì)封閉的區(qū)域。
也就是說(shuō),如果有人想要操作類里面的成員(field),不應(yīng)該讓它直接進(jìn)行這樣操作。而應(yīng)該通過(guò)良好定義的函數(shù)(或?qū)傩缘腟etter)來(lái)完成。除非你有不得不如此的理由,否則就不應(yīng)該讓人家直接訪問(wèn)你的私有成員。
下面的代碼通常是bad practice。
任意的類均能任意的修改Person內(nèi)的Name和Age,即便Name寫成亂碼或?qū)ge設(shè)成負(fù)數(shù),都是可以做到的,Person類自己是控制不住的。
public class Person{ public int Age; &nb