這是這個(gè)系列的第二篇。在第二篇里,我決定講一講封裝。
程序的不同部分應(yīng)該用封裝去互相隔離,模塊之間應(yīng)該不應(yīng)該產(chǎn)生很隨意的關(guān)聯(lián)。

可能有的人覺得不解,又或覺得是有道理的廢話,不急,先一步一步來。

我們先來看看面向?qū)ο蟮娜齻€(gè)基本特征是什么?

  • 繼承

  • 多態(tài)

  • 封裝

如果你是科班畢業(yè),這6個(gè)字應(yīng)該是你第一次學(xué)到類(class)的時(shí)候就聽老師說了。
我們老師的話大概是這樣的:

在類里面,封裝就是通過一些手段來限制類外部的訪問,依此隔離出類相對(duì)封閉的區(qū)域。

也就是說,如果有人想要操作類里面的成員(field),不應(yīng)該讓它直接進(jìn)行這樣操作。而應(yīng)該通過良好定義的函數(shù)(或?qū)傩缘腟etter)來完成。除非你有不得不如此的理由,否則就不應(yīng)該讓人家直接訪問你的私有成員。

下面的代碼通常是bad practice。
任意的類均能任意的修改Person內(nèi)的Name和Age,即便Name寫成亂碼或?qū)ge設(shè)成負(fù)數(shù),都是可以做到的,Person類自己是控制不住的。

public class Person{    public int Age;   &nb