面向对象三大特性【封装】

封装
a.什么是封装?
封装就是把每个对象的数据(属性)和操作(行为)包装在一个类中。即可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
b.封装的设计思想提:供对外的访问接口,隐藏内部的实现方式
c.封装的基本原则
(1)类一般是public
(2)属性一般是private
(3)构造方法一般是public
(4)get、set方法一般是public
例如:
下面代码中的属性姓名、年龄私有,用private封装,这样就只有本类可以访问,其他类都无法访问,如此就实现了对信息的隐藏

public class Person {//类里面可以封装变量、函数
	private String name;
	private int age;
	}

虽然private将属性隐藏起来了,但同时也对每个值提供对外的公共方法访问,也就是说我们可以通过set get方法对私有属性进行访问,例如:

public void setName(String na) {
		this.name = na;
	}
	public String getName() {
		return this.name;
	}
	public void setAge(int age) {
	if(age > 0 && age < 120)
			this.age = age;
	}
	public int getAge() {
		return age;
	}

封装实例

public class Person {//类里面可以封装变量、函数
	private String name;//不能直接用,必须给name分配内存
	public void setName(String na) {
		this.name = na;
	}
	public String getName() {
		return this.name;
	}
	private int age;
	public void setAge(int age) {
	if(age > 0 && age < 120)
			this.age = age;
	}
	public int getAge() {
		return age;	
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}

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

以上实例中public方法是外部两类访问该类成员变量的入口(通常这些方法被称为getter setter方法),因此任何访问类中的私有成员变量都要通过这些getter和setter方法。
访问方法:(通过set方法传递数据 get方法获取数据)

public class TestPerson {
	public static void main(String[] args) {
		Person p = new Person();
		p.setName("张三");
		p.setSex('男');
		p.setAge(26);
		System.out.println("姓名:" + p.getName() + " 性别:" + p.getSex() + " 年龄:" + p.getAge());
	}
}

运行结果:
在这里插入图片描述
d.封装的好处
增加代码的复用性
如:

public class Student {
	private int id;
	private String name;
	private char sex;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		if(sex == '男' || sex == '女') {
		this.sex = sex;
		}
	}
}


public class Test {

	public static void main(String[] args) {
		Student s = new Student();
		s.setName("张三");
		s.setSex('男');
		s.setId(84378);
		Student s1 = new Student();
		s1.setName("李四");
		s1.setSex('女');
		s1.setId(84378);
		System.out.println("姓名:" + s.getName() + "  性别:" + s.getSex() + "  学号:" + s.getId());
		System.out.println("姓名:" + s1.getName() + "  性别:" + s1.getSex() + "  学号:" + s1.getId());
	}

}

显然对代码一次一次的调用很麻烦,那么我们就可以使用一个函数将其封装起来,这样就减少了代码的累赘,如:

public class Student {
	private int id;
	private String name;
	private char sex;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		if(sex == '男' || sex == '女') {
		this.sex = sex;
		}
	}
	public void setProp(String name,int id,char sex) {
		this.setName(name);
		this.setSex(sex);
		this.setId(id);
	}
}
public class Test {
	public static void main(String[] args) {
		Student s = new Student();
		s.setProp("张三",87495,'女');
		System.out.println("姓名:" + s.getName() + "  性别:" + s.getSex() + "  学号:" + s.getId());	
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44084434/article/details/90065268