JAVA --接口与继承(四)多态

操作符的多态

同一个操作符在不同情境下,具备不同的作用
如果+号两侧都是整型,那么+代表 数字相加
如果+号两侧,任意一个是字符串,那么+代表字符串连接

public class test {
    
    

	public static void main(String[] args) {
    
    
		int a  = 5;
		String b = "5";
		String c = a+b;
		System.out.println(c);
	}
}

观察类的多态现象

package property;

public class item {
    
    
	String name;
	int price;
	public void buy() {
    
    
		System.out.println("购买了" + name);
	}
	public void effect() {
    
    
		System.out.println("购买后的效果");
	}
	public static void main(String args[]) {
    
    
		item a  = new lifepotion();
		item b = new magicpotion();
		a.effect();
		b.effect();
	}
}

类的多态条件

要实现类的多态,需要如下条件

  1. 父类(接口)引用指向子类对象
  2. 调用的方法有重写
    那么多态有什么作用呢? 通过比较不使用多态与使用多态来进一步了解

类的多态-不使用多态

假设英雄要使用血瓶和魔瓶,就需要为Hero设计两个方法
useLifePotion
useMagicPotion

除了血瓶和魔瓶还有很多种物品,那么就需要设计很多很多个方法,比如
usePurityPotion 净化药水
useGuard 守卫
useInvisiblePotion 使用隐形药水
等等等等

package charactor;
 
import property.LifePotion;
import property.MagicPotion;
   
public class Hero {
    
    
    public String name;
    protected float hp;
 
    public void useLifePotion(LifePotion lp){
    
    
        lp.effect();
    }
    public void useMagicPotion(MagicPotion mp){
    
    
        mp.effect();
    }
 
    public static void main(String[] args) {
    
    
         
        Hero garen =  new Hero();
        garen.name = "盖伦";
     
        LifePotion lp =new LifePotion();
        MagicPotion mp =new MagicPotion();
         
        garen.useLifePotion(lp);
        garen.useMagicPotion(mp);
         
    }
       
}

类的多态-使用多态

package property;
import property.item;
import property.lifepotion;
import property.magicpotion;

public class hero {
    
    
	String name;
	int hp;
	public hero(String name,int hp) {
    
    
		this.name = name;
		this.hp = hp;
	}
	public void useitem(item i) {
    
    
		i.effect();
	}
	public static void main(String args[]) {
    
    
		hero a = new hero("德玛西亚",100);
		
		lifepotion i = new lifepotion();
		magicpotion b = new magicpotion();
		a.useitem(i);
		a.useitem(b);
	}
}

练习-多态⭐⭐⭐⭐
如果物品的种类特别多,那么就需要设计很多的方法
比如useArmor,useWeapon等等

这个时候采用多态来解决这个问题
设计一个方法叫做useItem,其参数类型是Item
如果是使用血瓶,调用该方法
如果是使用魔瓶,还是调用该方法
无论英雄要使用什么样的物品,只需要一个方法即可

package charactor;
public class hero implements AD{
    
    
	String name;
	int hp;
	float movespeed;
	int armor;
	public void physicattack() {
    
    
		System.out.println("物理攻击");
	}
	public void die() {
    
    
		
	}
	public void kill(hero i) {
    
    
		i.die();
	}
	public static void main(String args[]) {
    
    
		hero a = new adhero();
		a.die();
		hero b = new aphero();
		b.die();
	}
}

1.在adhero,aphero,adaphero类中实现接口,implements mortal
(实现接口必须调用方法)

2.在adhero,aphero,adaphero类中重写die方法,当然他们的父类里面必须先有这个方法die()

3.在父类里面新建一个方法,我这里用的是kill(),参数是hero类型,
也就是adhero,aphero,adaphero他们的父类。

public void kill(hero i){
    
    
	i.die()
}

要实现类的多态,需要如下条件

  1. 父类(接口)引用指向子类对象
  2. 调用的方法有重写**

猜你喜欢

转载自blog.csdn.net/qq_17802895/article/details/108533996