前言
封装,是面向对象思想的特征之一。面向对象共有三个特征:封装、继承、多态。现在我们一起学习封装。我们将具体功能封装到方法中,或者将方法封装在类中,这些都是封装。方法就是一个最基本封装体,类其实也是一个封装体。
为什么要学习封装?
1. 提高了代码的复用性
2. 隐藏了实现细节,还要对外提供可以访问的方式,便于调用者的使用。
3. 提高了安全性。
什么是封装 ?
封装在生活中的体现
就拿电脑来说,它是由CPU、主板、显卡、内存、硬盘、电源等部件组成,我们将这些部件组装在一起就可以使用电脑了,如果这些部件都散落在外面,很容易造成危险,于是,使用机箱壳子将这些部件装在里面,并在机箱壳上留下一些插口,我们直接通过外部的插口功能就能使用了。
其实机箱就隐藏了部件设别的细节,对外提供了插口以及开关等访问内部细节的方式。
封装在代码中的体现
我们在描述人时,会提到人的姓名和年龄这两个属性,用代码体现:
class Person {
int age;
String name;
public void show() {
System.out.println("age=" + age + ",name" + name);
}
}
public class PersonDemo {
public static void main(String[] args) {
// 创建Person对象
Person p = new Person();
p.age = -20; // 给Person对象赋值
p.name = "我是大白兔";
p.show(); // 调用Person的show方法
}
}
从上面的代码中可以看出,Person中的属性可以任意访问和使用,这样说来是不符合实际需求的。我们在java中使用修饰符private将Person的属性私有起来,被private 修饰的成员只能在当前类中访问,其他类中无法直接访问,但是我们在给年龄赋值的时候也不能赋值,按照前面封装的思想来说,我们将姓名和年龄这两个属性的细节隐藏之后还要提供访问方式,让其他程序可以访问,同时在方法中可以对数据进行验证。
一般对成员属性的访问动作:赋值(设置 set),取值(获取 get),因此对私有的变量访问的方式可以提供对应的set 或者get 的方法。
class Person {
// 私有成员变量
private int age;
private String name;
// 对外提供设置成员变量的方法
public void setAge(int a) {
// 由于是设置成员变量的值,这里可以加入数据的验证
if (a < 0 || a > 130) {
System.out.println(a + "不符合年龄的数据范围");
return;
}
age = a;
}
// 对外提供访问成员变量的方法
public void getAge() {
return age;
}
}
this 关键字
当方法中出现了局部变量和成员变量的时候,在方法中怎么区分呢?可以在成员变量名前面加上this.来区别成员变量和局部变量。
/**
* 学生信息类
*/
public class Student {
private String name; // 姓名
private int age; // 年龄
public String getName() {
return name;
}
public void setName(String name) {
//this.name 中的name 表示类的成员变量,赋值符号右边的name 表示方法中的局部变量
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
说明:
this关键字,代表本类对象的引用;
this 是在方法中使用的,哪个对象调用了该方法, this就代表调用该方法的对象引用。
this常用来区分同名的成员变量和局部变量
总结
感谢您的阅读,本次和大家一起学习了封装和this 关键字的一些知识,后面会继续分享面向对象的继承和多态等知识,敬请期待!