封装
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
在此之前我们已经犯了—个在面向对象界最糟糕的错误。我们哪里有错呢?泄露资料!我们并没有注意到数据会被全世界的人看到,甚至还可以被改动。
你可能经历过暴露出实例变量的不愉快感觉。暴露的意思是通过圆点运算符来存取,像是:
theCat.height = 27;
你可以把这件事情看做是直接通过远程控制修改theCat的实例变量,若远程控制落入不当之人的手上。变量就可能会成为杀伤力强大的武器,因为你无法防止下面的操作:
theCat.height = 0;
这一定会很糟糕,所以我们需要创建setter这个方法给所有的实例变量,并寻求某种方法强制其他程序都必须通过setter来设定变量而不是直接的存取。
public void setHeight(int ht) {
if (ht > 9) {
height = ht;
}
}
数据隐藏
要将程序的实现从不良数据改成可以保护数据且还能让修改数据的方式非常简单。
所以要如何隐藏数据呢?答案是使公有与私有这两个存取修饰符(public和private)。
以下就是封装的基本原则:将你的实例变量标记为私有的,并提供公有的getter与setter来控制存取动作,或许在你有了更多的Java设计与编程经验之后会有些许不同的做法,但是目前的这种做法可以维持住安全性。
在线练习
{$ activeFileHint $}