Java面向对象三大特征——封装

什么是封装呢?

如果我们想给别人发一个快递,快递小哥需要把我们需要寄的物品,封装进一个快递盒。这样既能保证我们寄的物品完好无损,又能防止他人偷看我们寄出的物品,保证隐私安全。
同理,我们类的封装也有着同样的目的。类的封装,是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息。

下面是一个没有经过封装的类。

public class Person {
	String name; //姓名
	int age;     //年龄
	public void eat() {
		System.out.println("人会吃饭");
	}
	public void sleep(){
			System.out.println("人会睡觉");
		}
	}

封装一个类

那么我们如何来封装一个类呢?
这里要用到一个关键字——private

private(当前类访问级别)
如果类的成员被private修饰,那么这个成员只能在本类中被访问,其他的类则无法访问。
private可修饰成员变量,也可修饰成员方法。

下面是被修饰后的Person类

public class Person {
	private String name; //姓名
	private int age;     //年龄
	public void eat() {
		System.out.println("人会吃饭");
	}
	public void sleep(){
			System.out.println("人会睡觉");
		}
}

方法也可以封装,但不一定要封装,这是根据具体的业务需要来决定的,所谓封装即控制访问的权限。这里为了方便演示,只对成员变量进行封装。

当我们在Text类中去调用被private修饰的成员变量时,编译器就会报错 ,达到了封装的目的。
在这里插入图片描述

get set方法

那么我们在其他的类中,如何才能访问到被封装的数据呢?
既然无法直接调用,那么我们可以通过创建成员方法来访问到类中的数据。
我们用set方法来为成员变量赋值,用get方法来访问被封装的成员方法。

注:get set只是一个名字,也可以使用其他的命名,不过为了规范起见,不要起其他的名字。get/set后面跟上变量名,变量名首字母大写,如getName setName。

public class Person {
	private String name; //姓名
	private int age;     //年龄
	public String getName() {
		return name;  //将name作为返回值,返回给其他类
	}
	public void setName(String name1) {
		name = name1;  //把其他类中传进来的值name1,赋值给本类的name
	}
	public int getAge() {
		return age;  //将age作为返回值,返回给其他类
	}
	public void setAge(int age1) {
		age = age1;  //把其他类传进来的值age1,赋值给本类的age
	}
	public void eat() {
		System.out.println("人会吃饭");
	}
	public void sleep(){
			System.out.println("人会睡觉");
		}
	
}

在Text类中直接调用get set方法即可实现成员变量的赋值和访问
在这里插入图片描述

this关键字

在上面的get set方法的设计中,虽然完成了成员变量的赋值和访问,还存在着一些不足。作为追求完美的程序员,像name1,age1这样的变量名,都是不够完美的。那么,我们就可以用this关键字来使我们的get set方法变完美。

this关键字
1.调用本类的成员变量
2.调用本类的成员方法
3.调用本类的构造方法,但调用构造方法时要注意,只能在构造方法中使用this调用构造方法,不可在成员方法中调用,且this调用构造方法必须是该方法的第一条执行,并且只能出现一次。

下面就用代码来解释一下这三条。
1.调用本类的成员变量

class Person{
	int age;
	public Person(int age) {  //带参构造法
		this.age = age;  //将传进来的数值赋值给本类的age
	}
}

2.调用本类的成员方法

class Person{
	public void eat() {
	}
	public void sleep() {
		this.eat();  //在sleep方法中调用本类的eat方法
	}
}

3.调用本类的构造方法

class Person{
	public Person(){  //无参构造法
	}
	public Person(int age){
		this();  //在带参构造法中,调用了无参构造法
	}
}

完美版get set方法

知道了 this 关键字的基本使用方法后,我们就来完善一下 get set 方法:
将我们之前的 name1 和 age1,直接改为 name 和 age ,但是为了防止成员方法中的局部变量和成员变量混淆,我们就要用到 this.name 和 this.age 来区分成员变量和局部变量。

public class Person {
	private String name; //姓名
	private int age;     //年龄
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public void eat() {
		System.out.println("人会吃饭");
	}
	public void sleep(){
			System.out.println("人会睡觉");
		}
	
}

自动生成get set方法

在实际的开发中,get set方法是不需要程序员自己敲出来的,无论是idea还是eclipse都可以自动生成get set方法。

eclipse自动生成get set方法:
点击Source —— Generate Getters and Setters……
在这里插入图片描述
选中所有成员变量,点击ok即可
在这里插入图片描述
idea自动生成get set方法:
点击 代码 —— 生成
在这里插入图片描述
点击 Getter 和Setter
在这里插入图片描述
选中两个变量,点击确定即可
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G.E.N.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值