一、类与对象
从字面表达来看,类与对象这两个概念是模糊的,那到底什么是类,什么是对象呢?
直白的说,在生活中,类就是很多具有相同特征的事物的集合,而对象就是这些事物的一个个体。
来看下面这句话:
“咱们俩是一类人”
这句话就很好的诠释了类与对象的关系
“一类人”说明了这句话中“人”是一个类,而“咱们俩”这两个个体就是“人”这个大类中的两个对象。
这是生活中的类与对象,移植到java中也是大同小异。
文气一点的讲,在java中,类就是一个模板,由特征(属性)和方法(行为)构成。而对象是则是用属性和行为描述而成的具体的个体。类的属性对应对象的特征,类的方法对应对象的行为。
二、类的基本格式
在上一段中我们说过,类由属性和方法构成,那么在用代码定义类的时候,也要体现出类的属性和方法
定义类的代码
//定义类的格式
public class 类名{
//定义属性的格式
访问修饰符 数据类型 属性名;
//定义方法的格式
public 返回值数据类型 方法名(数据类型 参数名,...){
方法体;
}
}
三、实例化对象
想要做到一件具体的事情,必然需要一个具体的对象,光靠一个类是不行的,这就是需要我们实例化一个或者多个对象。
实例化对象的关键词是new。
//实例化对象的代码
类名 对象名=new 类名();
四、对象调用函数的方法
对象调用函数的关键字是"."
1、 对象名.函数名(实参);
2、 对象名.属性名="属性值";
五、对象同同时也可以作为参数
六、举例
package game;
import java.util.Random;
public class People {
private String name;
private int blood;
private Skill [] array = {new Skill("普通攻击",5)};
/**
* 定义构造方法
*/
public People(){
this("未命名",100);
}
/**
* 定义带参数的构造方法
* @param name
* @param blood
*/
public People(String name,int blood){
this.name = name;
this.blood = blood;
}
/**
* 定义带参数的构造方法
* @param name
* @param blood
*/
public People(String name,int blood,Skill [] array){
this.name = name;
this.blood = blood;
this.array = array;
}
/**
* 定义给姓名属性设置值的方法
* @param name
*/
public void setName(String name){
this.name = name;
}
/**
* 定义获取姓名属性值的方法
* @return name属性中存储的值
*/
public String getName(){
return name;
}
/**
* 定义给血量属性设置值的方法
* @param blood
*/
public void setBlood(int blood){
this.blood = blood;
}
/**
* 定义获取血量属性值的方法
* @return blood属性中存储的值
*/
public int getBlood(){
return blood;
}
/**
* 定义获取技能属性值的方法
* @return array属性中存储的值
*/
public Skill [] getArray(){
return array;
}
/**
* 定义给技能属性设置值的方法
* @param array
*/
public void setArray(Skill [] array){
this.array = array;
}
/**
* 攻击方法
* @param p要被攻击的对象
*/
public void beat(People p) {
//实例化一个随机数类的对象
Random rand = new Random();
//获取一个随机数的值
int value = rand.nextInt(array.length);
//从技能数据中随机获取一个技能对象
Skill skill = array[value];
//获取到要被name攻击对象的血量
int b = p.getBlood();
//减少血量值
b = b-skill.getAttack();
//重新设置对象的血量
p.setBlood(b);
//输出攻击的信息
System.out.println(name + "使用"+skill.getName()+",攻击了"+p.getName()+ ","+p.getName()+"剩余的血量是" + p.getBlood());
}
}
/**
* 技能类
*/
public class Skill {
private String name;
private int attack;
/**
* 构造方法
*
* @param name技能名称
* @param attack技能的攻击力
*/
public Skill(String name, int attack) {
this.name = name;
this.attack = attack;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAttack(int attack) {
this.attack = attack;
}
public int getAttack() {
return attack;
}
}
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
//定义一个存储技能的数组对象
Skill [] arraySol = {new Skill("重击",20),new Skill("普通攻击",5),new Skill("法术",50)};
People soldier=new People("战士张三",200,arraySol);
Skill [] arrayBoss = {new Skill("吸血",20),new Skill("普通攻击",5)};
People boss=new People("李四Boss",200,arrayBoss);
//判断战士和Boss的血量是否都大于0
while(soldier.getBlood() > 0 && boss.getBlood() > 0){
//调用战士攻击boss的方法
soldier.beat(boss);
//判断boss的血量是否小于或等于0,如果是则结束循环
if(boss.getBlood() <= 0){
System.out.println(soldier.getName()+"胜利!");
break;
}
//调用boss攻击战士的方法
boss.beat(soldier);
//判断战士的血量是否小于等于0,如果是则结束循环
if(soldier.getBlood() <= 0){
//输出信息
System.out.println(boss.getName()+"胜利!");
//结束循环
break;
}
}
}
}
运行结果: