#封装的意义:解决设计上的不合理。
Dog d = new Dog();
d.health = -10000; // 健康值不能低于0,随意赋值的不合理行为。使用封装给与规定
#封装的概念:是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。(来自百度百科)
#封装的好处:
1. 隐藏类的实现细节
2.只能通过规定方法访问数据
3.方便加入控制语句
4.方便修改实现
#如何实现封装?
1. 将属性public修改为private。即共有变为私有
2.属于封装属性的读写 getter/setter 方法
3.在getter/setter方法中加入属性控制语句
方法实例:
public class Dog {
private String name;
private int health;
private int love;
private String strain;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
if (health <=100 && health >=0) { // 将健康值的属性规定在0~100之间
this.health = health; // this.health 代表当前类的成员变量
}else {
this.health=60; // 如果输入不合理的数字则按默认的健康值60(也可以设定其他的,自己喜欢)
}
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
public String getStrain() {
return strain;
}
public void setStrain(String strain) {
this.strain = strain;
}
}
#练习:领养宠物并打印宠物信息
需求说明:根据控制台提示信息选择领养宠物(狗) 输入昵称、品种、健康值 打印宠物信息 要保证健康值的有效性(在1到100之间)
控制台体现(如图):
#代码体现:
猫类(cat)
package bean;
public class Cat {
public String name;
private int health;
private int love;
public String strain;
public int getHealth() {
return health;
}
public void setHealth(int health) {
if (health <=100 && health >=0) {
this.health = health;
}else {
this.health=60;
}
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
public String getStrain() {
return strain;
}
public void setStrain(String strain) { // 规定好猫猫的品种
this.strain =strain;
}
public Cat() {
}
public Cat(String name, int health, int love, String strain) {
this.name = name;
if (health <=100 && health >=0) {
this.health = health;
}else {
System.out.println("宠物的健康值应该在0至100之间 ");
this.health=60;
}
this.love = love;
this.strain = strain;
}
public void print(){
System.out.println("宠物信息:");
System.out.println("我的昵称:"+name+",健康值是"+health+",亲密度是:"+love+",品种:"+strain);
}
}
狗类(Dog)
package bean;
public class Dog {
public String name;
private int health;
private int love;
public String strain;
public Dog(String name, int health, int love, String strain) {
this.name = name;
if (health <=100 && health >=0) {
this.health = health;
}else {
System.out.println("宠物的健康值应该在0至100之间 ");
this.health=60;
}
this.love = love;
this.strain= strain;
}
public Dog() {
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
if (health <=100 && health >=0) {
this.health = health;
}else {
System.out.println("宠物的健康值应该在0至100之间,默认值 ");
this.health=60;
}
}
public int getLove() {
return love;
}
public void setLove(int love) { //宠物的亲密度规定为0
this.love = 0;
}
public String getStrain() {
return strain;
}
public void setStrain(String strain) {
this.strain = strain;
}
public void print(){
System.out.println("宠物信息:");
System.out.println("我的昵称:"+name+",健康值是"+health+",亲密度是:"+love+",品种:"+strain);
}
}
测试运行类(Test)
package demo2;
import java.util.Scanner;
import bean.Cat;
import bean.Dog;
public class Test01 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请给宠物起一个喜欢的名字:");
String name = scan.next();
System.out.print("请选择宠物的的类型(1.狗狗 2.猫猫):");
int choose = scan.nextInt();
switch (choose) {
case 1:
System.out.print("请选择狗狗的品种:(1.柴犬 2.萨摩耶):");
int type = scan.nextInt();
switch (type) {
case 1:
System.out.print("请输入狗狗的健康值(1~100):");
int health = scan.nextInt();
Dog d = new Dog(name, health, 0, "柴犬"); // 调用有参构造方法
d.print();
break;
case 2:
System.out.print("请输入狗狗的健康值(1~100):");
int health1 = scan.nextInt();
Dog d2 = new Dog(); // 调用无惨构造方法
d2.name=name;
d2.setHealth(health1);
d2.getHealth();
d2.getLove();
d2.strain="萨摩耶";
d2.print();
break;
default:
System.out.println("请输入正确的狗狗品种");
break;
}
break;
case 2:
System.out.print("请选择猫猫的品种:(1.布偶猫 2.缅因猫):");
int type1 = scan.nextInt();
switch (type1) {
case 1:
System.out.print("请输入猫猫的健康值(1~100):");
int health = scan.nextInt();
Cat c = new Cat(name, health, 0, "布偶猫");
c.print();
break;
case 2:
System.out.print("请输入猫猫的健康值(1~100):");
int health1 = scan.nextInt();
Cat c2 = new Cat();
c2.name=name;
c2.setHealth(health1);
c2.getHealth();
c2.getLove();
c2.strain="缅因猫";
c2.print();
break;
default:
System.out.println("请输入正确的猫猫品种");
break;
}
}
}
}
以上是本人自己编译的代码,方便自己理解。