要了解java就应该了解类,对象的概念。
类,自然界的事物有它的分类,比如动物类,植物类,建筑类等。每一个具体的对象都会有自己所属的类。比如,比如一条金毛,它是一个具体的对象,他所属于狗这个类,狗这个类同时也是属于动物类这个更大的类。可以通过一个对象逐渐追本溯源,找到它的所属类别。狗所具有的属性,金毛也具有,然而又有一些不同,这里拿金毛和泰迪为例,他们同属于狗这个类,他们都继承到了狗的一些特质,比如身上长毛,会叫,这时你会发现,它们的叫声有一些不同,这是他们对于叫的这个方法的一种改写。狗是一个抽象的概念,它具有的特性是它的子类都拥有的,在java中,狗能做的事情,叫做方法。比如金毛,它在拥有狗共有的特性之外,它还有一些独属于自己的方法。所以在某种程度上子类的方法包括了父类的一些方法,并对父类的方法做出了一些改写。以上通俗地解释了类的概念,也体现了类与类之间的关系,就是父类和子类的关系,子类可以继承父类的方法,并重写一些父类的方法。接下来我们将在程序中呈现这种类与继承的关系。
这里我写了一个简单的模拟对战的java程序,要实现的内容是:两个人类和一个怪兽进行PK.他们有不同的血量和攻击力,以及名称,程序将模拟对战过程,输出谁攻击了谁,谁掉了多少血,还剩下多少血,如果有一方死亡,则输出死亡信息,战斗持续到一方全部死亡,输出结果。
package com.myf.extends1016;
public class Role {
public String name;
public int blood;
public int attack;
public void setName(String n)
{
name=n;
}
public String getName()
{
return name;
}
public void setBlood(int b)
{
blood=b;
}
public int getBlood()
{
return blood;
}
public void setAttack(int a)
{
attack=a;
}
public int getAttack()
{
return attack;
}
public void attacking(Role q,Role w)//q:攻击方,w:被攻击方
{
w.setBlood(w.getBlood()-q.attack);
System.out.println(q.name+"正在攻击"+w.getName()+","+w.getName()+"减少的血量是"+q.attack+",剩余血量是"+w.getBlood());
}
}
这是第一个类文件的程序,这里我新建了一个role类,我可以把两个人类角色和一个怪兽角色都归入这个类,他们都是游戏角色。农夫,士兵,怪兽,都能继承这个role类的属性和方法。包括血量,攻击力,名称。这将大大简化我的代码,只需在role中定义属性和类,接下来无论创建多少角色,都可以直接继承role的属性和方法。
人类和怪兽都是role的子类。以下是role的子类。
package com.myf.extends1016;
public class Monster extends Role
{
}
package com.myf.extends1016;
public class Human extends Role
{
}
是不是很简单,都不需要写直接的属性和方法了。
最后,是主程序了,这里将上演一场大战。
package com.myf.extends1016;
public class Attack
{
public static void main(String[] args)throws Exception
{
int flag=0;
int x=0;
int soldier_life=0;
int farmer_life=0;
Human soldier=new Human();
soldier.setName("士兵");
soldier.setBlood(100);
soldier.setAttack(10);
Human farmer=new Human();
farmer.setName("农夫");
farmer.setBlood(100);
farmer.setAttack(5);
Monster guaishou=new Monster();
guaishou.setName("怪兽");
guaishou.setBlood(100);
guaishou.setAttack(30);
System.out.println("战斗开始!");
while(true)
{
Thread.sleep(300);
flag++;
if(flag==1000)
flag=0;
if(flag%10==0&&soldier_life==0)
{
soldier.attacking(soldier,guaishou);
if(guaishou.getBlood()<=0)
{
System.out.println("人类胜利");
break;
}
}
if(flag%15==0&&farmer_life==0)
{
farmer.attacking(farmer,guaishou);
if(guaishou.getBlood()<=0)
{
System.out.println("人类胜利");
break;
}
}
if(flag%12==0)
{
x=1+(int)(Math.random()*2);
if(x==1)
{
guaishou.attacking(guaishou,soldier);
if(soldier.getBlood()<=0)
{
System.out.println("士兵死亡");
soldier_life=1;
if(soldier_life==1&&farmer_life==1)
{
System.out.println("怪兽胜利");
break;
}
}
}
if(x==2)
{
guaishou.attacking(guaishou,farmer);
if(farmer.getBlood()<=0)
{
System.out.println("农夫死亡");
farmer_life=1;
if(soldier_life==1&&farmer_life==1)
{
System.out.println("怪兽胜利");
break;
}
}
}
}
}
}
我来简单解释一下我的程序的思路。在这里我创建了两个人类对象,农夫和士兵,一个妖怪对象,怪兽。并定义了他们的血量和攻击力,以及他们的名称。他们都继承了role的属性和方法。主函数中我还额外定义了两个变量,flag和x,flag用于循环计数,通过他的取余为0,来获取不同的攻击频率。x用来获取一个1到2的随机数,使得怪兽随机打一个人类对象。程序运行后将会输出战斗过程还有死亡信息,胜利信息。我们来运行一下,看看结果吧。
战斗开始!
士兵正在攻击怪兽,怪兽减少的血量是10,剩余血量是90
怪兽正在攻击农夫,农夫减少的血量是30,剩余血量是70
农夫正在攻击怪兽,怪兽减少的血量是5,剩余血量是85
士兵正在攻击怪兽,怪兽减少的血量是10,剩余血量是75
怪兽正在攻击士兵,士兵减少的血量是30,剩余血量是70
士兵正在攻击怪兽,怪兽减少的血量是10,剩余血量是65
农夫正在攻击怪兽,怪兽减少的血量是5,剩余血量是60
怪兽正在攻击农夫,农夫减少的血量是30,剩余血量是40
士兵正在攻击怪兽,怪兽减少的血量是10,剩余血量是50
农夫正在攻击怪兽,怪兽减少的血量是5,剩余血量是45
怪兽正在攻击士兵,士兵减少的血量是30,剩余血量是40
士兵正在攻击怪兽,怪兽减少的血量是10,剩余血量是35
士兵正在攻击怪兽,怪兽减少的血量是10,剩余血量是25
农夫正在攻击怪兽,怪兽减少的血量是5,剩余血量是20
怪兽正在攻击农夫,农夫减少的血量是30,剩余血量是10
士兵正在攻击怪兽,怪兽减少的血量是10,剩余血量是10
怪兽正在攻击农夫,农夫减少的血量是30,剩余血量是-20
农夫死亡
士兵正在攻击怪兽,怪兽减少的血量是10,剩余血量是0
人类胜利
结果出来啦,人类胜利。如果修改参数可能会看到不同的结果!