Java封装和this关键字
- 一.封装的特性
- 二.封装的原则
- 三.封装入门示例
- (一).实现方式一:不使用封装
- (二).实现方式二:使用封装
- 四.this关键字
一.封装的特性
1.安全
2.变化隔离
3.操作简单
4.可重用
二.封装的原则
把该隐藏的隐藏起来,该暴露的暴露出来。
三.封装入门示例
实现Employee类,成员变量有姓名、工号、性别,方法有工作,都使用public修饰。
(一).实现方式一:不使用封装
如果不使用封装方式实现,很容易出现赋值错误,并且任何人都可以更改对象中的状态,造成信息的不安全。
Employee 类
public class Employee {
// 属性
public String name;
public String id;
public String gender;
// 方法
public void gender() {
System.out.println(id+":"+name+":"+gender+"正在工作");
}
}
Employee 测试类
public class EmployeeTest {
public static void main(String[] args) {
// 创建Employee对象
Employee kangkang = new Employee();
// 通过类名.成员的形式初始化实例变量
kangkang.name = "kangkang";
kangkang.id="001X";
kangkang.gender="男";
// 调用成员方法
kangkang.work();
// 传入不合语法的参数
// kangkang.gender="无";
// kangkang.work();
}
}
在上述示例中,将属性暴露给了外界。在这样的类对象中任何人都可以可以通过"对象名.方法名"去直接访问对象的属性。为了改变这样的不安全性,就可以通过封装设置属性的可见性来规避类似的问题。
(二).实现方式二:使用封装
Employee 类
public class Employee {
private String name;
private String id;
private String gender;
public void EmployeeInfo() {
System.out.println("name"+name);
System.out.println("id"+id);
System.out.println("gender"+gender);
}
// 使用set和get方法给对象进行传值
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
Employee测试类
public class EmployeeTest {
public static void main(String[] args) {
// 创建对象
Employee kangkang = new Employee();
/*
* 将无法再使用对象名.方法名的方式进行赋值;
* 因此在Employee中需要提供set和get方法对对象进行传值和获取
*/
//set方法给对象赋值
kangkang.setName("康康");
kangkang.setId("001X");
kangkang.setGender("男");
// get方法获取属性值
String name = kangkang.getName();
System.out.println(name);
String id = kangkang.getId();
System.out.println(id);
String gender = kangkang.getGender();
System.out.println(gender);
}
}
四.this关键字
this关键字表示当前对象;或者理解为正在创建的对象。
例子:
public class Cat {
// this关键字
private String name;
public String getName() {
return name;
}
public void setName(String name) {
/*
* this关键字表示当前对象
* 如果没有this.name
* 那么就会变成setName方法中的参数
* 传参时实参也不会返回到当前对象中
*/
this.name = name;
}
}
不仅如此,this关键字还可以在类中的方法内进行互调。
例子:
public class Dog {
public void eat() {
System.out.println("小狗正在吃饭!");
}
public void eatBone() {
System.out.println("小狗正在吃骨头!");
this.eat();
}
}