学了这么长时间的面向对象,其中一个重要的特点就是封装,今天就来简单总结一下:
指隐藏对象的属性和实现细节,仅仅对外提供公共访问方式。
(1)隐藏了实现细节,提供了公共访问方式;
(2)提高了代码的复用性;
(3)提供了安全性。
(1)将不需要对外提供的内容都隐藏起来;
(2)把属性隐藏,通过公共方法对其访问。
现在展示一段代码,说明一个问题:
class Fengzhuang{ String name; int age; /*写一个方法对数据进行校验: * 明确:返回值类型:void * 参数列表:int a*/ public void SetAge(int a){ if(a<0 || a>120){ System.out.println("你给的数据有问题"); }else{ age =a; } } public void show(){ System.out.println("姓名:"+name); System.out.println("年龄:"+age); } } class FengZhuangDemo { public static void main(String[] args) { Fengzhuang fz = new Fengzhuang(); fz.name="徐佳莹"; fz.age=-27; fz.show(); } }运行结果为:姓名:徐佳莹 换行 年龄:-27
这里我们可以看到一个明显的问题:数据不合理,这就涉及到了数据校验。另一个问题就是方法不调用不执行。
所以,通过对象去给成员变量赋值,可以赋值一些非法的数据,这是不合理的。我们应该在赋值之前先对数据进行判断。Demo类是一个测试类,只是创建对象,调用方法。所以,判断应该是定义在上一个类中。做数据校验需要依靠逻辑语句,所以应该写一个方法。代码中的setAge()方法。
但是方法不调用不执行,则不会起到作用,那么如何去强制要求不能直接使用成员变量呢?针对这种情况:在面向对象的语言中,提供了一个关键字:private。
private:私有的,可以修饰成员方法和成员变量。但是注意:被private修饰的成员只能在本类中访问。
所以,现在的代码(使用封装原理):
class Fengzhuang{ String name; private int age; /*写一个方法对数据进行校验: * 明确:返回值类型:void * 参数列表:int a*/ public void SetAge(int a){ if(a<0 || a>120){ System.out.println("你给的数据有问题"); }else{ age =a; } } public void show(){ System.out.println("姓名:"+name); System.out.println("年龄:"+age); } } class FengZhuangDemo { public static void main(String[] args) { Fengzhuang fz = new Fengzhuang(); fz.name="徐佳莹"; //fz.age=-27; //通过方法进行赋值 fz.SetAge(-27); fz.show(); } }此时的运算结果:
姓名:徐佳莹 换行 年龄:0
封装原则是面向对象的三大特点之一,十分重要,在编程过程中熟练的运用封装原理十分重要,它最重要的好处就是隐藏了实现的细节,提高了程序的安全性。在如今互联网安全严峻的环境下十分重要。
