植物大战僵尸与类与继承关系

           在学习继承之前,我们都有个疑惑i,那就是为什么要学类与继承,简单举个例子而言,老爸老妈多优秀,甚至长相,孩子生下来就基本具有了这个属性,老爸高,儿子就高,当然这不一定,只是举个例子,那么儿子就不用费心自己努力去长个了,比如老爸学习好,儿女就可以继承老爸优良传统,通过耳濡目染,久而久之就会学习好了,财富也是,也就是说羡煞旁人都得不到的好多东西,身为继承者就可以轻松得到了,这就添加了便利性,不需要再学习一遍。综上类的继承好处有:

. 1.提高了代码的重用性。
 2.提高程序的扩展性。

继承的关键字: extends
 语法格式:
 public class 类名b(子类或者超类或者派生类) extends 类名a(父类或者基类),类名 {
  
 }
 
 public class 类名c extends 类名b {
  
 }
 注意:Java的继承是单继承,一个类只能继承一个父类。

其中使用较多的是自动转型,这次代码用多态实现,确实感到代码的编辑过程中的丰富多彩

方法的重写,方法的重载,自动转型,继承

还有我在编辑植物大战僵尸时,犯得严重错误是:

凡是自动转型,所调用的方法必须在父类中存在,因此由于忽略了这一点导致很长时间都在寻找错误

这里利用所学知识可以实现一个简单的植物大战僵尸代码实现

这里是玩家代码实现

package lesson1302;
public class Player {
    public String name;
   
public void  use(String name,Plant a,Zombie b){
   this.name=name;
//System.out.println(name+"使用了"+a.name+"攻击了"+b.name);
}
public static void main(String[] args){
 
DancingZombie b1=new  DancingZombie("跳舞僵尸",100,500);
Peashooter a1=new Peashooter("豌豆射手",200,300);
Player p1=new Player();
p1.use("玩家张依依",a1,b1);
System.out.println(p1.name+"使用了"+a1.name+"攻击了"+b1.name);
while(a1.blood>0&&b1.blood>0){
a1.attack(b1);
System.out.println("张依依的豌豆射手正在攻击"+b1.name);
b1.attack(a1);
System.out.println("跳舞僵尸正在使劲吃"+a1.name);

}
if(a1.blood<0){
System.out.println("很遗憾你的豌豆射手被吃掉了,oh no!!!你的脑子被僵尸吃掉了");
}
if(b1.blood<0){
System.out.println("恭喜豌豆射手消灭了跳舞僵尸");
}


}
}
//两个父类

package lesson1302;

public class Plant {
 public String name;//定义名字
 protected int hp;//定义攻击力
 protected int blood;//定义血量
 //定义植物的攻击方法
 public void  attack(Zombie x){
  
 }
 

}

package lesson1302;

public class Zombie {
 public String name;//定义名字
 public int hp;//定义攻击力
 public int blood;//定义血量
 //定义僵尸的攻击方法
 public void  attack(Plant y){
  
 }

}
两个子类,僵尸和植物

package lesson1302;

public class Peashooter extends Plant {
 public String name;//定义名字
 protected int hp;//定义攻击力
 protected int blood;//定义血量
 public Peashooter(String name,int power,int blood){//给构造函数赋值
  this.name=name;//表示将传入的name值给当前调用构造函数的对象的name属性值
  this.hp=power;//表示将传入的power值给当前调用构造函数的对象的power属性值
  this.blood=blood;//表示将传入blood值给当前调用构造函数的对象的blood属性值
  }
 //定义植物的攻击方法
 public void attack(Zombie c){
  c.blood=c.blood-this.hp;
  System.out.println(this.name+"还剩血量:"+this.blood+"   "+c.name+"还剩血量"+c.blood);
 }

}

 

package lesson1302;

public class DancingZombie extends Zombie{
 public String name;//定义名字
 protected int hp;//定义攻击力
 protected int blood;//定义血量
 public  DancingZombie(String name,int power,int blood){//给构造函数赋值
  this.name=name;//表示将传入的name值给当前调用构造函数的对象的name属性值
  this.hp=power;//表示将传入的power值给当前调用构造函数的对象的power属性值
  this.blood=blood;//表示将传入blood值给当前调用构造函数的对象的blood属性值
  }
 //定义僵尸的攻击方法
 public void attack(Plant d){
  d.blood=d.blood-this.hp;
  System.out.println(this.name+"还剩血量:"+this.blood+"   "+d.name+"还剩血量"+d.blood);
 }

}

 

 

你可能感兴趣的:(类继承植物大战僵尸简单实现)