关于类与继承的学习探究

要了解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

人类胜利

结果出来啦,人类胜利。如果修改参数可能会看到不同的结果!

猜你喜欢

转载自www.cnblogs.com/mayifan/p/9821095.html