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();
	}

}