Java系列之封装

版权声明


封装

在面向对象语言中,封装的特性是由类来体现的,它实现了高内聚,低耦合的设计。
封装顾名思义就是把东西装起来,类似于充电宝。
把电池包装好,避免接触水而损坏,这体现出了封装的第一个好处:安全性
你买了充电宝后只看的到充电宝的外表和它提供的充电接口,这体现了封装的第二个好处:隐藏细节
充电宝使电池包装的,随时相应就用。这体现了封装的第三个好处:重用性
封装的核心就是隐藏细节,对外提供访问接口。

封装的实现

属性私有化(private),避免恶意访问数据与修改。
对外提供接口,即方法暴露,在set方法中加入判断过滤非法属性。

package com.ew;

public class Student {
	/**
	 * 定义两个成员变量 name,gender
	 * 属性私有化 private
	 * 避免使用对象名.属性名的方式
	 * 被非法数据赋值
	 */
	private String name;  
	private String gender;
	/**
	 *对外提供方法,访问和设置数据只能
	 *由我们提供的方式去实现
	 */
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		if(gender.equals("男")||gender.equals("女")) {
			this.gender = gender;
		}else {
			System.out.println("请输入合法格式!(男or女)");
		}
		
	}
	
	@Override
	public String toString() {
		return "Student [name=" + name + ", gender=" + gender + "]";
	}
	
	
}

访问控制符

public(公共的)protected(受保护的)default(默认)private(私有)
同一类truetruetruetrue
同一包truetruetrue
子类truetrue
不同包true

public:被它修饰的属性和方法,在何处都可以被访问
protected:被它修饰的属性和方法,在同一个包下和子类都是可以访问的,即使子类不是同一个包也是可以访问。
default:不加任何访问的控制符,系统会默认加上这个,代表只有本类和同包才可以访问
private:被它修饰的属性和方法,只有本类可以访问

注意
修饰类只能是public与default。当然成员内部类可以使用private

JavaBean

也叫pojo类,实体类。有属性和get,set方法。通常用它来存储数据。

package com.ew;

public class Student {
	private String name;  
	private String gender;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender= gender;	
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", gender=" + gender + "]";
	}
	
	
	
	
}

存储数据

package com.ew;

public class TestStudent {

	public static void main(String[] args)  {
		Student student=new Student();
		student.setName("ew");
		student.setGender("男");
		System.out.println(student);
	}
}

在这里插入图片描述

构造函数

即通过构造方法,构建对象。

package com.ew;

public class Student {
	/**
	 * 定义两个成员变量 name,gender
	 * 属性私有化 private
	 */
	
	private String name;  
	private String gender;
	
	public Student() {
	}
	//有参构造 即使用这个方法要提供参数,下面这个需要一个String类型的参数
	public Student(String name) {
		this.name = name;
	}
	//有参构造 即使用这个方法要提供参数,下面这个需要两个String类型的参数
	public Student(String name, String gender) {
		this.name = name;
		this.gender = gender;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		if(gender.equals("男")||gender.equals("女")) {
			this.gender = gender;
		}else {
			System.out.println("请输入合法格式!(男or女)");
		}
		
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", gender=" + gender + "]";
	}
	
}

注意
无参构造,没有其他构造方法时,这个可以不写,系统会隐式写一个无参构造
但是有了其他有参构造,系统就不会写这个无参了
这样就必须写这个无参构造,否则后面使用Student student=new Student();就会报错,new 后面的方法为无参构造。

实现:

package com.ew;

public class TestStudent {

	public static void main(String[] args)  {
		Student student=new Student();
		student.setName("ew");
		student.setGender("男");
		System.out.println(student);
		//使用有参构造就不需要set方法传入数据
		Student student2=new Student("元芳", "男");
		System.out.println(student2);
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值