一、关于这个例子的核心思想:
①有些属性,可以简单赋值 ,有些属性,不能简单赋值,需要经过很复杂的内部逻辑处理之后才赋值
②那么,我们通常应该把属性全部修饰成私有的,然后暴露出get和set之类方法来让使用这个类的人去操作对象上的数据
(关于get set IDE可以用Alt+Insert进行操作)
③好处:写这个类的人,可以把内部数据处理逻辑封装起来,增加了类的内聚性,增加了数据逻辑的安全性
④同时,降低了使用者的复杂度
二、关于private
私有的,可以修饰成员变量和成员方法称为私有变量和私有方法。它修饰的成员变量或者方法只能在本类中可以访问,这是一种封装思想的体现。
三、关于public
用public修饰的成员变量和方法称为共有变量和共有方法。它具有最大的访问权限,可以访问任何一个在src下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。
四、关于LOL游戏案例
package javase.day05.lol;
import java.util.ArrayList;
/**
* 用户的游戏账号(比如: "朕御驾亲征痛杀之")
* 用户所在的对局ID(比如: "艾欧尼亚-1001")
* 用户所使用的英雄角色(比如:
* 易大师或者阿狸或蘑菇....)
* 所装配的装备(装备应该可以是多个,比如"无尽之刃"、"狂徒铠甲"等)
* 用户助攻数
* 用户击杀人头数
* 斩杀小兵数
* 用户的本局游戏实时得分(游戏得分=助攻数*10+击杀人头数*20+小兵数*2+装备件数*5)
* 用户的历史累计得分
* 用户的英雄等级:
* [0,20)-->1级
* [20,40) --> 2级
* [40,60) -->3级
* [60 -->4级
*
*/
public class Player {
private String account;
private String missionId;
private String hero;
private ArrayList<String> equipments = new ArrayList<>();
private int assistants;
private int kills;
private int killsSoldiers;
private int missionScore;
private int amountScore;
private int heroLevel;
public void setAccount(String account) {
this.account = account;
}
public void setMissionId(String setMissionId) {
this.missionId = missionId;
}
public void setHero(String hero) {
this.hero = hero;
}
//每加一件装备用户的英雄当局得分发生变化
public void addEquipment(String equipment) {
this.equipments.add(equipment);
//每增加一件装备,游戏时实得分加5分
this.missionScore += 5;
//更新英雄的等级
this.setHeroLevel();
// 累计历史得分也需要 +5分
this.amountScore += 5;
}
//增加助攻数,当调用这个方法助攻数加1
public void setAssistants() {
this.assistants++;
//每增加一个助攻,游戏时实增加10分
this.missionScore += 10;
//更新英雄的等级
this.setHeroLevel();
//累计历史得分也需要加10分
this.amountScore += 10;
}
//增加人头数
public void addKills() {
this.kills++;
this.missionScore += 20;
//更新英雄的等级
this.setHeroLevel();
this.amountScore += 20;
}
//增加补兵数
public void addKillSoldier() {
this.killsSoldiers++;
this.missionScore += 2;
//更新英雄的等级
this.setHeroLevel();
this.amountScore += 2;
}
//更新英雄的等级的方法
private void setHeroLevel() {
//更新英雄的等级
if (this.missionScore < 20) {
this.heroLevel = 1;
} else if (this.missionScore < 40) {
this.heroLevel = 2;
} else if (this.missionScore < 60) {
this.heroLevel = 3;
} else {
this.heroLevel = 4;
}
}
public String getAccount() {
return this.account;
}
public String getMissionId() {
return this.missionId;
}
public String getHero() {
return hero;
}
public ArrayList<String> getEquipments() {
return equipments;
}
public int getAssistants(){
return assistants;
}
public int getKills() {
return kills;
}
public int getKillsSoldiers() {
return killsSoldiers;
}
public int getMissionScore() {
return missionScore;
}
public int getAmountScore() {
return amountScore;
}
public int getHeroLevel() {
return heroLevel;
}
}
package javase.day05.lol;
import java.util.ArrayList;
public class PlayerTest {
public static void main(String[] args) {
//初始化一个英雄数据
Player player1 = new Player();
//
player1.setAccount("狐狸");
player1.setHero("剑姬");
player1.setMissionId("艾欧尼亚-999");
//买装备
player1.addEquipment("死亡板甲");
//补兵
player1.addKillSoldier();
//击杀人头
player1.addKills();
//增加助攻
player1.setAssistants();
//又买装备
player1.addEquipment("电刃");
//显示当前击杀的人头数
System.out.println("击杀人数"+player1.getKills());
System.out.println("助攻次数"+player1.getAssistants());
System.out.println("英雄等级"+player1.getHeroLevel());
System.out.println("----------------------");
//击杀人头数
player1.addKills();
player1.addKills();
//增加助攻
player1.setAssistants();
player1.setAssistants();
//又买装备
player1.addEquipment("复活甲");
player1.addEquipment("斗篷");
System.out.println("击杀人数"+player1.getKills());
System.out.println("助攻次数"+player1.getAssistants());
System.out.println("英雄等级"+player1.getHeroLevel());
}
}