封装:
什么是封装?
封装是帮助我们更好设计类的一种思想。告诉我们如何正确设计对象的属性和方法。
封装的原则:
对象代表什么,就得封装对应的数据,并提供数据对应的行为。
封装的意义:
让编程变得简单(找对象,调方法)
降低学习成本,不用死记硬背,需要的时候去查找就行,让数据更加安全
封装的步骤:
1 使用private关键字来修饰成员变量。
2 使用public修饰getter和setter方法。
public class Student {
private int id;
private String name;
private String score;
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
javaBean:
一个类里面的所有成员属性都被私有化,而且提供了get和set方法,我们把这种类叫做JavaBean类(实体类)
封装总结:
封装:隐藏实现细节,仅对外暴露公共的访问方式
将代码抽取到方法中,这是对代码的一种封装
将属性抽取到类中,这是对数据的一种封装
封装的好处:
1 提高了代码的安全性
2 提高了代码的复用性
练习1:
定义一个员工类Employee
* 自己分析出几个成员,然后给出成员变量
* 姓名name,工号id,工资salary
* 构造方法,
* 空参和有参的
* getXxx()setXxx()方法,
* 以及一个显示所有成员信息的方法。并测试
Employee类:
public class Employee {
String name;
int id;
int salary;
public Employee(String name, int id, int salary) {
this.name = name;
this.id = id;
this.salary = salary;
}
public void show(){
System.out.println(this.name);
System.out.println(this.id);
System.out.println(this.salary);
}
public Employee() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
测试类:
public class EmployeeShow {
public static void main(String[] args) {
Employee xiaoming = new Employee("小明", 123, 12345);
Employee xiaobai=new Employee("小白",1234,123456);
xiaoming.show();
xiaobai.show();
}
测试结果:
练习2:
定义一个Hero类
属性有 power,name,分别代表体力值和英雄的名子,体力值默认为100;
方法有
1.void go(); //行走的方法,如果体力值为0,则输出不能行走,此英雄已死亡的信息
2.void eat(int n); //吃的方法,参数是补充的血量,将 n的值加到属性power中,power的值最大为100,
3.void hurt();//每受到一次伤害,体力值-10,体力值最小不能小于0
编写测试类,来测试以上代码
Hero类:
public class Hero {
int power=100;
String name;
public void go(int poewr){
this.power=poewr;
if (this.power==0){
System.out.println("英雄不能行走,已死亡");
}
}
public void eat(int n,int power){
power=power+n;
if (power>=100){
power=100;
}
System.out.println(power);
}
public void hurt(int n,int power){
power=power-10*n;
if (this.power<=0){
this.power=0;
}
System.out.println("剩余血量为"+power);
}
这里的三个方法我都是分开测试的,也就是每次的血量都是可以根据传的参数值来重新对血量赋值。
测试类:
public class HeroTest {
public static void main(String[] args) {
Hero hero = new Hero();
hero.go(0);
hero.eat(1,100);
hero.hurt(6,100);
}
测试结果:
练习三:
3、编写自定义类实现图书信息设置
任务:
属性:书名、作者、出版社、价格
方法:信息介绍
要求:
设计构造函数实现对属性赋值
设置私有属性,get/set方法实现对属性的访问
限定图书价格必须大于10,如果无效需进行提示,并强制赋值为10
限定作者、书名均为只读属性
信息介绍方法描述图书所有信息
图书类:
public class Library {
private String book="好书";
private String author="我";
private String press;
private int price;
public void show(){
System.out.println(book);
System.out.println(author);
System.out.println(press);
System.out.println(price);
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
if (price<=10){
System.out.println("输入无效,请重新输入图书价格");
this.price=10;
}
}
public String getBook() {
return this.book;
}
public String getAuthor() {
return this.author;
}
}
测试类:
public class LibraryTest {
public static void main(String[] args) {
Library library = new Library();
String author =library.getAuthor();//作者
String book =library.getBook();//书名
library.setPrice(9);
int price =library.getPrice();
library.setPress("湖南出版社");
String press = library.getPress();
library.show();
}
测试结果: