Java三大特性之封装


Java面向对象
完整代码
是什么?
封装:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
为什么?
在没有使用封装之前,我们对数据的操作都是进行直接赋值。这样使用可能会产生一些不合理的赋值,不合理的操作。保证数据安全性。
封装的好处
➠只能通过规定的方法访问数据
➠隐藏类的实现细节
➠方便加入控制语句
➠方便修改实现

权限

在实现封装之前需要先了解权限修饰符
权限修饰符的作用如下
public(公共的)
具有最大的访问权限,可以同项目访问任何一个包下的类、接口、异常等。
protected(受保护)
它的主要作用就是保护(继承)子类的。它的含义在于子类可以使用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西。
默认的
即不写权限修饰符。它是针对本包(同包)访问而设计的,任何处于本包下的类、接口、异常等,都可以互相访问。
private(私有的)
它的访问权限仅限于类的内部,主要用于封装。

访问权限可以参考下表
在这里插入图片描述

get、set

那么到底如何建立一个封装类呢?
第一步、修改对象属性的访问权限为private(私有的)

	private String name;//姓名
	private int age;//年龄
	private double  height; //身高
	private String weight;//体重
	private String  position;//位份
	private int appearance;//颜值
	private String hobby;//爱好
	private String familyBackground;//家庭背景
	private String address;//住址

第二步、加入setter/getter方法
set方法用于读取对象属性数据
get方法用于写入对象属性数据
示例:对对象姓名进行封装

	public void steName(String name) {
		this.name=name;
	}
	public String getNmae() {
		return name;
	}
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

通常年龄设置为不小于0岁和不大于160岁 我们可以在代码中对此进行限制 来保证数据的合理性

	public void setAge(int age) {
		if(age>=0&&age<=160) {
			this.age = age;
		}
	}

问什么写成这个样子?
走的人多了便也成了路 写的人多了就成了规范
通常我们不会手写setter/getter方法,一般Java编辑器会有快捷方式生成setter/getter方法 可以自行百度
以eclipse为例
Alt+Shift+S
在这里插入图片描述
在这里插入图片描述WifeConcubine类的完整代码

package com.qingsu.personnel;

public class WifeConcubine {
	
	//我们将对象的特征称之为对象的属性  将对象的行为称之为对象的方法
	
	//后宫佳丽的共有属性 (对象的属性)
	
	private String name;//姓名
	private int age;//年龄
	private double  height; //身高
	private String weight;//体重
	private String  position;//位份
	private int appearance;//颜值
	private String hobby;//爱好
	private String familyBackground;//家庭背景
	private String address;//住址
	
	

	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 double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}

	public String getWeight() {
		return weight;
	}

	public void setWeight(String weight) {
		this.weight = weight;
	}

	public String getPosition() {
		return position;
	}

	public void setPosition(String position) {
		this.position = position;
	}

	public int getAppearance() {
		return appearance;
	}

	public void setAppearance(int appearance) {
		this.appearance = appearance;
	}

	public String getHobby() {
		return hobby;
	}

	public void setHobby(String hobby) {
		this.hobby = hobby;
	}

	public String getFamilyBackground() {
		return familyBackground;
	}

	public void setFamilyBackground(String familyBackground) {
		this.familyBackground = familyBackground;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
	

	//后宫佳丽的共有方法 (对象的方法)
	public WifeConcubine() {
		System.out.println("对象已被创建");
	}
	
	public WifeConcubine(String name) {
		this.name=name;
		System.out.println(name+"对象已被创建");
	}
	
	//赏花
	public void flowerViewing() {
		System.out.println("这是一个赏花的行为");
	}
	//和皇上一起吃饭
	public void eat() {
		System.out.println("这是一个吃饭的行为");
	}
	//跳舞
	public void dancing() {
		System.out.println("这是一个跳舞的方法");		
	}
	//侍寝
	public void waiter() {
		System.out.println("这是一个侍寝的方法");		
	}

}

修改Simulation类中对属性赋值方法的写入和读取

package com.qingsu.personnel;

public class Simulation {
	
	public static void main(String[] args) {
		
		//创建一个嫔妃对象 王梦竹 同时会调用无参的构造方法 构造方法中this同时会调用有参构造对其进行赋值
		WifeConcubine mengzhu= new WifeConcubine();
		//创建一个嫔妃对象 李秀影
		WifeConcubine xiuying; //创建一个数据类型为 WifeConcubine 我们自己定义的一个类 可以当作数据类型来用 
		xiuying= new WifeConcubine("李秀影");//将李秀影对象进行实例化 取得对象所需要的属性及方法 可以理解为对对象进行赋值
		//对李秀影对象内的属性进行赋值
		
		xiuying.setAge(19); //对年龄进行赋值
		xiuying.setHeight(1.66);//对身高进行赋值、
		xiuying.setPosition("美人");//对位份进行赋值
		xiuying.setAppearance (7); //颜值
		xiuying.setHobby("弹琴"); //爱好
		xiuying.setFamilyBackground("父亲为户部侍郎"); //家世
		xiuying.setAddress("钟粹宫");  
		
		
		
		System.out.println(xiuying.getName()+"是后宫模拟器的一员,年龄"+xiuying.getAge()+"岁,身高"+xiuying.getHeight()+",在后宫的位份是"+xiuying.getPosition()+",她的爱好是"+xiuying.getHobby()+",她的家世"+xiuying.getFamilyBackground()+",她的住址是"+xiuying.getAddress());
 		
		
		//继续创建一个嫔妃对象 季凌菲 
		WifeConcubine  lingfei = new WifeConcubine("季凌菲");//直接对姓名进行赋初值
		lingfei.setAge(21);  //对年龄进行赋值
		lingfei.setHeight(1.71);//对身高进行赋值
		lingfei.setPosition("妃");//对位份进行赋值  
		lingfei.setAppearance (7); //颜值
		lingfei.setHobby("舞蹈"); 
		lingfei.setFamilyBackground("父亲为兵部尚书");
		lingfei.setAddress("景仁宫"); 
		System.out.println(lingfei.getName()+"是后宫模拟器的一员,年龄"+lingfei.getAge()+"岁,身高"+lingfei.getHeight()+",在后宫的位份是"+lingfei.getPosition()+",她的爱好是"+lingfei.getHobby()+",她的家世"+lingfei.getFamilyBackground()+",她的住址是"+lingfei.getAddress());
	
	
	
		//调用对象的方法 实现对象的行为
		xiuying.dancing();
		xiuying.eat();
		xiuying.waiter();
		xiuying.flowerViewing();
	}

}

文章是作者面向对象文章的单独拆分如果存在阅读不连续性请参考下文

Java面向对象
完整代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值