组团学

面向对象的三大特征-封装

阅读 (762670)

1、封装概述

1.1、什么是封装

成员变量都是隐藏在对象内部的,外界无法直接操作和修改。
封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

1.2、封装的原则

将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

1.3、封装步骤

private修饰成员变量

对需要访问的成员变量,提供对应的一对get/set方法

1.4、案例

**需求:**编写一个类中得到生日的方法

分析:

① 类的成员变量可以成为只读或者只写的。比如用:访问器getXxxx();或者修改器setXxxx();

② 类可以对储存在其中的成员变量中的内容有一个整体的控制。可以根据访问修饰符的提点在其它类中调用该类中的属性和行为。

③类的用户不需要知道类是如何储存数据的。

public String getBirthday(){ return year + "-" + month + "-" + day; } public void setBirthday(String birthday){ //拆分字符串,分别取出年月日,给year、month、day进行赋值 } 而在外部调用这个方法的时候 this.getBirthday(); this.setBirthday("1990-9-9"); 此时就体现出外部是不知道如何储存birthday这个方法的,用户只能调用它。

2、封装实现

2.1、private修饰属性

修改属性的可见性来限制对属性的访问(一般限制为private)

public class Person{ private String name; private int age; }

这段代码中,将nameage属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

2.2、公共方法访问

对每个值属性提供对外的公共方法访问,也就是创建一对赋值取值方法,用于对私有属性的访问。

public class Person{ private String name; private int age; public int getAge(){ return age; } public String getName(){ return name; } public void setAge(int age){ this.age = age; } public void setName(String name){ this.name = name; } }

我们将name,age属性私有化,那么除了Person这个类以外其他地方都不能使用他,所有这个时候,我们选择了全局的set,get方法,来为我们的属性name,age来存放值和取值。

采用this关键字是为了解决成员变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。

2.3、案例

public class Encap{ private String name; private String idNum; private int age; //声明set,get方法初始化与获取 public int getAge(){ return age; } public String getName(){ return name; } public String getIdNum(){ return idNum; } public void setAge( int newAge){ age = newAge; } public void setName(String newName){ name = newName; } public void setIdNum( String newId){ idNum = newId; } }
public class EncapDemo{ public static void main(String args[]){ Encap encap = new Encap(); //创建对象,通过对应的set方法,初始化 encap.setName("James"); encap.setAge(20); encap.setIdNum("12343ms"); System.out.print("Name : " + encap.getName()+ " Age : "+ encap.getAge()); } }

运行结果:

image20191216151637075.png

我们在调用我们的属性name,age的时候,使用了,set,get方法,那么这就是一个典型的封装。

3、javaBean

JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的 set 和 get 方法。

3.1、格式

public class ClassName{ //成员变量 //构造方法 //无参构造方法【必须】 每个类都有一个默认的无参的构造方法 //有参构造方法【建议】 //成员方法 //getXxx() //setXxx() }

3.2、案例

需求:编写一个javaBean规范的类,以动物类为例。

public class DongWu{ private String name; private int age; //构造方法,默认可不写 public DongWu(){ } //有参的构造方法 public DongWu(String name,int age){ this.name=name; this.age=age; } //成员方法 public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } }
public class DongWuDemo { public static void main(String[] args) { //无参构造使用 DongWu s= new DongWu(); s.setName("猫"); s.setAge(2); System.out.println(s.getName()+"‐‐‐"+s.getAge()); } }

运行结果:

image20191218112934513.png

需要 登录 才可以提问哦