Day13、面向对象三大特性之封装

发布于:2023-02-02 ⋅ 阅读:(282) ⋅ 点赞:(0)

1、什么是封装

1.1、封装的概念

        将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

1.2、封装的两个大致原则

1)把尽可能多的东西藏起来,对外提供便捷的接口;

2)把所有的属性藏起来;

2、如何实现封装

 3、封装的好处

便于使用者正确使用系统,防止错误修改属性

有助于系统之间的松耦合,提高系统独立性

提高软件的可重用性

降低了构建大型系统的风险

4、例:使用封装实现企鹅类

使用封装实现电子宠物系统的企鹅类正确输入健康值和亲密度

保证健康值的有效性(0-100),否则取默认值60

保证亲密度的有效性(0-100),否则取默认值60

public class Penguin {
	// 定义属性
	private String name;
	private int health;
	private int love;

	public Penguin() {

	}

	public Penguin(String name, int health, int love) {
		this.name = name;
		this.health = health;
		this.love = love;
	}
	
	public void setName(String name){
		this.name=name;
	}
	
	public String getName(){
		return name;
	}
	
	public void setHealth(int health){
		//调用此方法来给对象的health赋值,在赋值前对传过来的health进行判断
		if(health<0||health>100){
			System.out.println("您输入的健康值有误,默认给健康值赋值为60");
			this.health = 60;
			return;//这里的return作用是结束方法后续代码的执行
		}
		this.health =health;
	}
	
	
	public int getHealth(){
		return health;
	}
	
	public void setLove(int love){
		//对传递过来的love值进行判断
		if(love<0||love>100){
			System.out.println("您输入的亲密度值有误,默认给亲密度赋值为80");
			this.love=80;
			return;
		}
		this.love=love;
	}
	
	public int getLove(){
		return love;
	}
	

	// 定义一个方法输出对象信息
	public void printInfo() {
		System.out.println("宠物信息:昵称:" + this.name + ",健康值:" + this.health
				+ ",亲密度:" + this.love);
	}
}
public class PenguinTest {

	public static void main(String[] args) {
		// 使用无参构造方法创建Penguin类的对象
		Penguin penguin1 = new Penguin();
		// 给对象penguin1的属性赋值,因为name属性使用private修饰了,所以不能同对象名.属性名直接给name属性赋值,只能是用其它方式给name属性赋值
//		penguin1.name = "QQ";
//		System.out.println(penguin1.name);
		
		penguin1.setName("QQ");
		String name =penguin1.getName();
		System.out.println(name);
		
		penguin1.setHealth(-90);
		System.out.println(penguin1.getHealth());
		
		penguin1.setLove(-99);
		System.out.println(penguin1.getLove());
	}

}

5、包(package)

5.1、包的作用

1)允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件

2)有助于实施访问权限控制

3)防止命名冲突 区分名字相同的类

5.2、如何创建包 

 1)作为Java源代码第一条语句

2)用package声明包,以分号结尾

5.3、包命名规范

1)包名由小写字母组成,不能以圆点开头或结尾

package mypackage;

2) 包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名

package net.javagroup.mypackage;

3) 包名后续部分依不同机构内部的规范不同而不同

package net.javagroup.research.powerproject;

5.4、用MyEclipse创建包

1)JDK提供基本包

a、java.lang:虚拟机自动引入

b、java.util:提供一些实用类

c、java.io:输入、输出

2)使用MyEclipse创建包的两种方法

a、分别创建包和类

b、创建类的过程中创建类所在的包

5.5、如何导入包

为了使用不在同一包中的类,需要在Java程序中使用import关键字导入这个类

 1)系统包:java.util

2)自定义包:cn.jtest.classandobject

*:指包中的所有类

School:指包中的School类

5.6、使用包的注意事项

1)一个类同时引用了两个来自不同包的同名类

必须通过完整类名来区分

2)每个包都是独立的,顶层包不会包含子包的类

3)package和import的顺序是固定的

a、package必须位于第一行(忽略注释行)

b、只允许有一个package语句

c、其次是import

d、接着是类的声明