Java 封装

47 阅读4分钟

问题:对于dog的年龄可以任意定义,不符合规范。

如果可以直接操作事物的属性,容易出现错误的数据,造成程序不符合逻辑;

思考解决办法:****

可以考虑通过一个函数来给对象的成员变量赋值,在赋值的时候对传入的参数进行检验,如果数据不合法,就给出错误提示;

但是只有函数还不行,因为可以直接操作类的属性,那么就可以绕过这个函数,不使用它;所以要彻底解决这个问题,还要作出限制,只能通过这个函数赋值,不能直接操作类的属性;

因此可以考虑使用封装,将这个类的成员变量隐藏起来;

封装

什么是封装?

封装:隐藏方法内部功能的实现细节,把方法名给外部调用

为什么要封装?

比如组装电脑;

台式机主机组成:主板;硬盘;显卡;内存;电源;CPU;风扇;机箱;

如果没有机箱,将这些原件都直接安装在主板上,连接电源,一样也可以用;

但是里面所有东西都直接暴漏在外面,太不安全,也不美观;使用也不方便;

所以使用包装,可以提高安全性、美观性和易用性;

 

java代码中的封装:

函数:封装一段具体实现功能的代码;

类:封装了同一类事物的共有的属性(成员变量)和行为(函数);

所以java中的封装还可以提高代码复用性,降低开发和维护的难度;

 

封装的好处:

可以隐藏事物的细节,提高安全性、易用性和美观性;还可以提高代码的复用性;

 

如何封装?

第一步:将属性私有化(在类的属性前加上 private ****

private:一个访问权限修饰符,表示被修饰的成员(成员变量、函数)是私有的,只能在定义它的类中使用,不能被其他地方使用;

问题:隐藏一个事物的属性之后,外界不能直接来修改,但同时也不能够获取了;

因为用private修饰属性之后只能在本类中使用,别的地方既不能修改,也不能获取,所以为了让其它地方还可以操作,一般要再对外提供两个函数,供外界修改和获取这个属性;****

 

第二步 : 提供 get set 方法( get set 方法写在有私有化属性的类中)****

实际上,在开发中,一般一个类的成员变量都应该私有化,同时提供公开的赋值和取值的方法,而且这两个方法的命名都有一个规范:

赋值方法的方法名:set+变量名(变量名首字母大写)

取值方法的方法名:get + 变量名(变量名首字母大写)

get方法--------有返回值

访问修饰符  数据类型 get属性名(){

      return 属性名

image.png

set方法-----------不需要返回值,但是有参数

访问修饰符  void set属性名(参数){

      this.属性名 = 参数

结论:

封装,就是包装,主要用来隐藏事物的实现细节,提高程序的安全性;如果外界需要访问被封装的属性,需要对外提供公开的getter和setter函数;

 

构造函数

 

在我们现实生活中,一般一个事物,一旦创建,都具有一些属性值;

要想在java中模拟这种情况,就需要在创建对象的时候直接给对象的成员变量赋值;而要实现这种功能,就需要使用构造函数;

 

什么是构造函数?

构造函数,又叫做构造器,就是在对象创建的时候由JVM自动调用的函数;

构造函数就是用来在创建对象的时候给对象的成员变量赋值用的;

如何编写构造函数?

访问修饰符  类名(参数){

在java中,每一个类都至少有一个构造函数;创建对象都是通过构造函数进行的;

如果一个类中没有直接书写构造函数,编译器编译时会帮我们添加一个无参的构造函数,这个构造函数就是默认构造函数;

默认构造函数,都是无参的函数;

默认构造函数只在一个类中没有书写构造函数时才会存在;