JAVA对象有三大特性:封装,继承,多态.这篇首先介绍封装
什么是封装?
封装是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
-
良好的封装能够减少耦合。
-
类内部的结构可以自由修改。
-
可以对成员变量进行更精确的控制。
-
隐藏信息,实现细节。
---------来自菜鸟教程
通俗一点来说就是,封装就是把能实现一个功能的代码集中装在一个方法.然后我们不需要知道它是怎么写的,我们直接拿来用就行.不管它里面怎么改.只要功能不变,不需要我们提供额外的参数啥的。我们拿来用的就不用管。
那么提取重要的话,
1,修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
2,更容易理解与维护,也加强了程式码的安全性。
就这两句话来说说封装。 如果你能体会到这两句话的好处.那么我相信你肯定能用自己的话来说出封装是什么了.
封装好处之一 :修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
类似这样的好处,我之前在介绍方法的时候也说过。
比如这个
public class DemoClass {
public void getOneToOne(){
System.out.println("1+1=2");
}
}
然后要调用的话是这样调用的。
public static void main(String[] args) {
DemoClass demoClass = new DemoClass();
demoClass.getOneToOne();
}
结果输出 "1+1=2"
如果我要直接的输出10遍1+1=2 是不是要写10次System.out.println(“1+1=2”);万一有一天我要改成2+2=4 那我是不是要修改10遍.
但是如果给它封装一下.我输出10遍1+1=2,我要写10次demoClass.getOneToOne();
但是如果某一天我要修改成2+2=4 我只需要修改DemoClass的getOneToOne方法中的1+1=2 就可以全部一起修改
封装的好处之一并且也是最主要的功能就体现出来了
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
在这边的体现就是我只要修改getOneToOne方法中的System.out.println(“1+1=2”); 改成 为 System.out.println(“2+2=4”);
而不用修改调用的程序片段,即demoClass.getOneToOne();这个不用改
封装好处之二:更容易理解与维护
首先,更容易维护这一点意思就是更容易进行修改.其实和好处之一差不多.
那么更容易理解体现在哪?
比如这段代码
public class DemoClass {
public void getOneToOne(){
for(int i =1;i<=9;i++){
for(int j =1;j<=i;j++){
System.out.print(j+"*"+i+"="+(i*j)+" ");
}
System.out.println();
}
}
}
如果你没有见过这段代码.我让你说出它的输出结果.想必你要花一定时间才能理解出它的意思.
这段代码的输出结果是
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
没错是九九乘法表.
但是你想要让一个从来没见过这段代码的人在几秒内就能知道它的意思怎么做?
答:给方法起一个名字
把getOneToOne这个名字改成九九乘法表.
比如说jiujiuchengfabiao() 就这么俗气的拼音
然后这样执行
public static void main(String[] args) {
DemoClass demoClass = new DemoClass();
demoClass.jiujiuchengfabiao();
}
唉~~你发现我需不需要理解或知道jiujiuchengfabiao()里面写了啥?
不用!方法名告诉了我这个方法它会输出啥. 几秒钟就知道了.
因此封装把实现功能的代码放到一堆,但是它要有一个合理可靠的方法命名才算是好的封装.不过拼音不建议哈。一般都用单词
然后假如我换了另外一种写法来实现这个九九乘法表.对使用者有没有影响?是不是没有。你改内部就改内部。我用就是了。
封装好处之三:加强了程式码的安全性
也就是说封装能让代码更安全,体现在哪?
比如这么一段代码
public class Phone {
private double size = 5.5;
public double getSize(){
return this.size;
}
}
private是什么意思?就是这个size只能在Phone这个类里面用.别人拿不到.
关于权限修饰符.我后面介绍完继承之后在介绍.这边就这么简单的知道一下private的意思,就是别的类拿不到.
回到这段代码.如果我们要得到这个Phone的size怎么做?
public static void main(String[] args) {
Phone phone = new Phone();
double size = phone.getSize();
}
这样就拿到了这个size.
但是如果我们要改它的size呢!!!?
你发现你改不了,你直接写phone.size = 9.2? 直接报错,因为它是private它只能在Phone这个类里面改.
到这加强了程式码的安全性这句话的意思有没有一点儿体现了?
你不能随便乱改我的东西。除非我给你入口。
那如果我就是要改怎么办?
跟Phone这个类谈谈人生让它给你个入口呗.
然后我谈成功了它给了我入口
然后这个Phone类就变成了这样
public class Phone {
private double size = 5.5;
public double getSize() {
return size;
}
//改变size的入口
public void setSize(double size) {
this.size = size;
}
}
然后这样写
public static void main(String[] args) {
Phone phone = new Phone();
phone.setSize(9.2);//我要改成9.2
double size = phone.getSize();
}
此时你就成功的把size改成9.2了
封装概念的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
这句话的意思,想必到这你肯定会有一点儿体会到。
封装到这就介绍完了.
那么假如让你说说封装.你会怎么用自己的话说呢?体会到了上面写出的三大好处.你肯定能用自己的话说出一二。而不会说出机械性的那种概念。
下回介绍JAVA三大特性之一:继承.