面向对象编程:就是在模拟现实生活。
对象:只要是一个具体的物体或者一个具体的事物就是一个对象。
举例:
荷花
会从那些方面去描述一个对象呢?
特征:名字,年龄,身高,体重,性别,...
行为(功能,用途):走路,吃饭,睡觉,学习,玩,...
物体根据 根据对象相似的特征和相似的行为进行归类。
程序中的类:就是将生活中的对象进行一种抽象的定义。
类包含两个部分:1.属性 2.方法(方法分为两类:1.构造方法 2.普通方法)
类的属性对应的是对象的特征;类的方法对应的是对象的行为。
3.类的格式
public class 类名 {
//属性定义格式
private 数据类型 属性名;
//构造方法定义格式
public 类名构造方法名(数据类型 参数名,...){
//代码
}
//普通方法定义格式
public 返回值数据类型 方法名(数据类型 参数名,...){
//代码
}
}
4.实例化对象和调用方法的格式
实例化对象的关键字:new
格式:
类名 对象名 = new 构造方法名(参数值);
调用方法的格式:
对象名.方法名(参数值);
5.构造方法
构造方法用途
1.初始化属性值
2.实例化对象
构造方法和普通方法的区别
1.返回值不同
2.调用时间不同
3.方法名不同
4.用途不同
6.方法重载
方法重装的原因 不同的对象会有同一种方法,要将他们进行区分
方法重载的条件:
1.在一个类中或者在有继承关系的父类和子类中;
2.方法名必须要完全一致;
3.方法所带的参数个数,参数类型,参数顺序必须要有一个不同。
调用重载的方法:
根据方法所带的参数个数,参数类型,参数顺序来区分方法的调用。
7.this关键字
作用:
1.当参数名和属性名相同时,可以使用this关键字来做区分,加了this的表示属性,没有加的则表示参数。
2.调用构造方法,属性或者方法。
参数和属性名不同时可以不用this
this.属性=参数
this.name
this.study();
public 构造方法(String name){
this(name,1);
}
Student stu = new 构造方法("a");
Student stu2 = new 构造方法("a");
this表示当前调用方法的对象
附带“德玛西亚与艾希对打”的代码
import java.util.Random;
public class fighting
{
private String name;//角色名字
private int power;//攻击力量
private int upPower;//初始攻击
private int blood;//血量
private int maxBlood;//血量上限
private int upSpeed;//初始速度
private int speed;//速度
private int exp=0;//经验
private int degree=1;//级别
//获取属性
//初始攻击值
public int getUpPower()
{
this.upPower+=this.degree*2;
return this.upPower;
}
//初始最大血量
public int getmaxBlood()
{
this.maxBlood+=this.degree*10;
return this.maxBlood;
}
//初始攻速
public int getUpSpeed()
{
this.upSpeed+=this.degree;
return this.upSpeed;
}
//等级初始
public int getDegree()
{
this.degree=(this.exp+100)/100;
return this.degree;
}
//设置和获取名字属性
public void setName(String name)
{
this.name=name;
}
public String name()
{
return this.name;
}
//构造函数
public fighting(String name ,int power,int maxBlood,int speed)
{
this.name = name;
this.upPower=power;
this.maxBlood=maxBlood;
this.upSpeed=speed;
} //攻击某人
public void attack(fighting r)
{
//初始化攻击双方属性
this.blood=this.getmaxBlood();
this.speed=this.getUpSpeed();
this.power = this.getUpPower();
r.blood=r.getmaxBlood();
r.speed=r.getUpSpeed();
r.power = r.getUpPower();
r.name=r.name();
int i=0;
Random rand = new Random();//产生随机数
while(this.blood>0&&r.blood>0)
{
i++;
if(i>10) break;//战斗10次结束
if(this.speed>r.speed)//一方速度比另一方速快
{
r.blood=r.blood-this.power;//速度快的一方开始攻击
System.out.println(this.name+"用q打了对方一下,对方减少了"+this.power);
System.out.println(r.name+"你还剩余"+r.blood+"滴血");
if(r.blood>0)//一击未死,对方开始进攻
{
this.blood=this.blood-r.power;
System.out.println(r.name+"用技能q打了对手一下,血量减少"+r.power);
System.out.println(this.name+"你还剩余"+this.blood+"滴血");
}
}
else if(this.speed==r.speed&&rand.nextInt(10)>5)//产生一个10以内的随机数并且大于五,才能让对手进攻
{
r.blood=r.blood-this.power;
System.out.println(this.name+"用技能w打了你一下,血量减少"+this.power);
System.out.println(r.name+"你还剩余"+r.blood+"滴血");
if(r.blood>0)
{
this.blood=this.blood-r.power;//剩余血量大于0,对手进攻
System.out.println(r.name+"用技能q打了你一下,血量减少"+this.power);
System.out.println(this.name+"你还剩余"+this.blood+"滴血");
}
}
else
{
this.blood=this.blood-r.power;
System.out.println(r.name+"用技能e打了你一下,血量减少"+r.power);
System.out.println(this.name+"你还剩余"+this.blood+"滴血");
if(this.blood>0)
{
r.blood=r.blood-this.power;
System.out.println(this.name+"用技能r打了你一下,血量减少"+this.power);
System.out.println(r.name+"你还剩余"+r.blood+"滴血");
}
}
}
//决定比赛的输赢的方法
if(i>10||r.blood==this.blood)//当比赛的会和超过或者血量相等时
System.out.println("此场为平局");
else if(r.blood<=0)//对手的血量小于0
{
System.out.println(r.name+"你输了");
this.exp=this.exp+1;//经验增长
System.out.println(this.name+"你赢了");
System.out.println(this.name+"你获得了1点经验");
System.out.println(this.name+"你当前的等级是"+this.getDegree() +"级 经验是"+exp);}
else
{
System.out.println(this.name+"你输了");
this.exp=this.exp+1;
System.out.println(r.name+"你赢了");
System.out.println(r.name+"你获得了1点经验");
System.out.println(r.name+"你当前的等级是"+this.getDegree()+"级 经验是"+exp);
}
}
}
public class winner {
/**
* @param args
* @param
*/
// public static void main(String[] args)
// {
//
//
// // TODO Auto-generated method stub
//
// }
//
//}
public static void main(String[] arg)
{
fighting r1 = new fighting("艾希",100,350,8);//实例化一个对象r1
fighting r2 = new fighting("德玛西亚",100,350,8);//实力化对象r2
for(int i=0;i<10;i++)//打十个回合
r1.attack(r2);//调用攻击函数
}
}