第四章 类、对象和包
面向对象分析过程
- 万物皆对象;(找对象)
- 对象因关注而产生;(找属性和行为)
- 把具有相同属性和行为的对象进行抽取,就是类;(生成类)
面向对象编程过程
- 编写类
- 填写类的属性和行为
- 通过类实例化对象(new)
- 通过.操作符调用属性和行为
来自long包中的类就不用导包;类是引用数据类型;
new
Dog dog=new Dog();
- 左边的引用数据类型的长度为4个字节;
- 右边:
- 实例化对象
- 分配空间
- 自动初始化(基本数据类型为0;引用数据类型为空)
类和对象的关系
- 类是对象的抽象;对象是类的实例化;
- 类是具有相同属性和行为的一组对象的抽象;
类的定义
public class 类名{
}
类名、Java文件名、class文件名的关系
- 只有公共类名=Java文件名;
- 类名=class文件名;
- 一篇Java文件可以有多个类,但只能有一个公共类;
- class文件的个数和类的个数一致;
内存存放
- 栈:局部变量,
- 堆:new实例化的全局变量;
- 数据段:
- 代码段:
垃圾回收
看是否有引用,程序员没办法主动来决定,通过System.gc();虚拟机尽最大努力从所有丢弃的对象中回收了空间。
- 匿名对象只能使用一次,
this
- 含义:当前对象的引用,
- 使用条件:方法中的全局变量和局部变量重名时;而我们要访问的是全局变量,那么我们就需要this来操作;否者就近原则,为局部变量;
属性访问器get
当要访问一个访问修饰为private的私有属性时,我们要通过访问器
get方法来访问
private String neme;
public String getName(String name){
return name;
}
属性修改器set
当要修改一个访问修饰为private的私有属性时,我们要通过访问器
set方法来访问
private String neme;
public void setName(String name){
this.name=name;
}
实例
需求:
制作一个小游戏,具有以下功能:
- 1、角色:名字、等级、防御力、攻击力、武器、防具;
- 2、角色拥有攻击力,当有武器时,附带攻击效果;否者为普通攻击
- 3、角色拥有防御,当有防具时,附带防御效果;否者为普通防具
分析:
- 首先,编写通过以上需求分析我们可以看出该游戏我们需要书写三个类:分别是角色类、武器类、防具类;
然后分析各个类的属性和方法:
- 角色类:
- 属性应该有名字,等级,没有武器时的攻击力,没有防具是的防御力
- 方法应该有升级,攻击的伤害,攻击时的防御;
2.武器类:
- 属性应该有武器名字,武器的固定伤害
3.防具类:
- 属性应该有防具名字,防具的固定防御
- 角色类:
最后,通过主函数main来调用个各类的属性和方法
具体代码
//防具类
package com.lovo.homework.game;
public class Weapon {
private String name;
private int gongJiLi;
public void special(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGongJiLi() {
return gongJiLi;
}
public void setGongJiLi(int gongJiLi) {
this.gongJiLi = gongJiLi;
}
}
//武器类
package com.lovo.homework.game;
public class Armor {
private String name;
private int fangYuLi;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getFangYuLi() {
return fangYuLi;
}
public void setFangYuLi(int fangYuLi) {
this.fangYuLi = fangYuLi;
}
}
//角色类
package com.lovo.homework.game;
public class Rolo {
private String name;
private int grade;
private int gongJiLi;
private int fangYuLi;
private boolean weaponOrNot;
private boolean armorOrNot;
public boolean getWeaponOrNot() {
return weaponOrNot;
}
public void setWeaponOrNot(boolean weaponOrNot) {
this.weaponOrNot = weaponOrNot;
}
public boolean getArmorOrNot() {
return armorOrNot;
}
public void setArmorOrNot(boolean armorOrNot) {
this.armorOrNot = armorOrNot;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public int getGongJiLi() {
return gongJiLi;
}
public void setGongJiLi(int gongJiLi) {
this.gongJiLi = gongJiLi;
}
public int getFangYuLi() {
return fangYuLi;
}
public void setFangYuLi(int fangYuLi) {
this.fangYuLi = fangYuLi;
}
public void upGrade(){
this.setGrade(this.getGrade()+1);
System.out.println("升级!达到"+this.getGrade()+"级!");
}
public void defense(Weapon weapon){
if(this.getGrade()>4){
System.out.println("可以使用武器!");
System.out.println("当前属性:");
System.out.println("角色:"+this.getName()+"\n等级为:"+this.getGrade()+"\n自身造成伤害:"+this.getGongJiLi()+"\n武器:"+weapon.getName()+"\n造成伤害:"+weapon.getGongJiLi());
}else{
System.out.println("当前属性:");
System.out.println("角色:"+this.getName()+"\n等级为:"+this.getGrade()+"\n自身造成伤害:"+this.getGongJiLi()+"\n无武器:"+"\n没有造成伤害");
}
}
public void attack(Armor armor){
if(this.getGrade()>=3){
System.out.println("可以使用防具!");
System.out.println("当前属性:");
System.out.println("自身抵御伤害:"+this.getGongJiLi()+"\n防具:"+armor.getName()+"\n抵御伤害:"+armor.getFangYuLi());
}else{
System.out.println("当前属性:");
System.out.println("自身抵御伤害:"+this.getGongJiLi()+"\n无防具:"+"\n无额外防御");
}
}
}
//主函数
package com.lovo.homework.game;
public class TestMain {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Rolo rolo=new Rolo();
rolo.setName("无名");
rolo.setGrade(0);
rolo.setGongJiLi(100);
rolo.setFangYuLi(50);
Weapon weapon=new Weapon();
weapon.setName("神剑");
weapon.setGongJiLi(500);
Armor armor=new Armor();
armor.setFangYuLi(300);
armor.setName("藤甲");
System.out.println("欢迎来到小游戏!");
System.out.println("#################");
rolo.defense(weapon);
rolo.attack(armor);
System.out.println("#################");
rolo.upGrade();
rolo.defense(weapon);
rolo.attack(armor);
System.out.println("#################");
rolo.upGrade();
rolo.defense(weapon);
rolo.attack(armor);
System.out.println("#################");
rolo.upGrade();
rolo.defense(weapon);
rolo.attack(armor);
System.out.println("#################");
rolo.upGrade();
rolo.defense(weapon);
rolo.attack(armor);
System.out.println("#################");
rolo.upGrade();
rolo.defense(weapon);
rolo.attack(armor);
}
}
输出结果
欢迎来到小游戏!
#################
当前属性:
角色:无名
等级为:0
自身造成伤害:100
无武器:
没有造成伤害
当前属性:
自身抵御伤害:100
无防具:
无额外防御
#################
升级!达到1级!
当前属性:
角色:无名
等级为:1
自身造成伤害:100
无武器:
没有造成伤害
当前属性:
自身抵御伤害:100
无防具:
无额外防御
#################
升级!达到2级!
当前属性:
角色:无名
等级为:2
自身造成伤害:100
无武器:
没有造成伤害
当前属性:
自身抵御伤害:100
无防具:
无额外防御
#################
升级!达到3级!
当前属性:
角色:无名
等级为:3
自身造成伤害:100
无武器:
没有造成伤害
可以使用防具!
当前属性:
自身抵御伤害:100
防具:藤甲
抵御伤害:300
#################
升级!达到4级!
当前属性:
角色:无名
等级为:4
自身造成伤害:100
无武器:
没有造成伤害
可以使用防具!
当前属性:
自身抵御伤害:100
防具:藤甲
抵御伤害:300
#################
升级!达到5级!
可以使用武器!
当前属性:
角色:无名
等级为:5
自身造成伤害:100
武器:神剑
造成伤害:500
可以使用防具!
当前属性:
自身抵御伤害:100
防具:藤甲
抵御伤害:300