Java继承和多态(一)

对象和类的基本概念

要学习继承与多态,就要先了解什么是对象和类,这里指的对象当然不是男女朋友,对象:指的是具体存在的实体,具有明确定义的状态(属性)和行为(方法),比如像克林顿,男,1946-8-19,做总统,制造门事件。。。,克林顿就是一个对象。那什么是类呢,类指的是具有相同属性和方法的一组对象的集合,是对象的模板/图纸,可以规定对象的特征(属性和方法),比如战士类,法师类,英雄类。。。

为什么使用继承呢

假设我们正在开发一款moba类游戏,类似于王者荣耀,那么王者荣耀里有很多种类的英雄,像战士,法师,射手,辅助等,每种英雄既有相同的属性,例如名字,等级,生命值,又有不同的属性,比如法师有法术攻击,战士有物理攻击等,现在有两个方案可以实现
方案一:直接定义各个英雄类
战士类
属性:名字,等级,最大生命值,当前生命值,物理攻击力。。。
方法:移动,物理攻击,嘲讽。。。
法师类
属性:名字,等级,最大生命值,当前生命值,法术攻击力。。。
方法:移动,法术攻击,瞬移。。。
那么在编写程序的过程中,我们发现战士类和法师类有一些相同的属性和方法,那么为了发扬能少写绝对不多写的原则,我们便有了方案二,即使用继承
方案二:使用继承
英雄类:
属性:名字,等级,最大生命值,当前生命值
方法:移动
战士类 继承英雄类:
属性:物理攻击力
方法:小拳拳,嘲讽
法师类 继承英雄类:
属性:法术攻击力
方法:biubiubiu,瞬移
那么显而易见的,使用继承是有很多优点的,基类定义了公共内容,方便统一修改,且整体减少了代码量,添加新的类也非常方便

示例

基类----Hero

public class Hero {
     private String nickName;
     private int level;
     public void move() {
    	 System.out.println("Hero类的move方法");
     }
	public Hero() {
		super();	
	}
	public Hero(String nickName, int level) {
		super();
		this.nickName = nickName;
		this.level = level;
	}
	public String getNickName() {
		return nickName;
	}
	public void setNickName(String nickName) {
		this.nickName = nickName;
	}
	public int getLevel() {
		return level;
	}
	public void setLevel(int level) {
		this.level = level;
	}    
}

派生类----Warrior,继承了Hero类

public class Warrior extends Hero{
       private int pysicalAttack;//战士的特有属性:物理攻击类
       public Warrior() {}
       public Warrior(String nickName,int pysicalAttack,int level) {
    	   setPysicalAttack(pysicalAttack); 
    	   setNickName(nickName);
    	   setLevel(level);
       }
	public int getPysicalAttack() {
		return pysicalAttack;
	}
	public void setPysicalAttack(int pysicalAttack) {
		this.pysicalAttack = pysicalAttack;
	}  
}

派生类----Mage,继承了Hero类

public class Mage extends Hero{
      private int magicAttack;
      Mage(){}
      Mage(String nickName,int magicAttack,int level){
    	  setNickName(nickName);
    	  setMagicAttack(magicAttack);
    	  setLevel(level);
      }
	public int getMagicAttack() {
		return magicAttack;
	}
	public void setMagicAttack(int magicAttack) {
		this.magicAttack = magicAttack;
	}
}

实现

public class HeroTest {

	public static void main(String[] args) {
		Warrior 牛战士=new Warrior("牛战士", 500,15);
		System.out.println(牛战士.getLevel()+"级的"+牛战士.getNickName()+"的物理攻击力是"+牛战士.getPysicalAttack());
		Mage 老爹=new Mage("老爹",1000,20);
		System.out.println(老爹.getLevel()+"级的"+老爹.getNickName()+"的魔法攻击力是"+老爹.getMagicAttack());
		牛战士.move();
		老爹.move();
	}

}

Java继承和多态(一)_第1张图片
可以看到move方法写在了Hero类中,但是Warrior类的对象和Mage类的对象也可以调用这个方法,这就是用继承,另外注意有两类是不能被继承的,其一是基类私有的属性和方法是不能被继承的,其二是基类的构造是不能继承的

你可能感兴趣的:(Java,java)