概念
类的多态 :父类引用指向子类对象.如下第15、16行。
多态: 都是同一个类型,调用同一个方法,却能呈现不同的状态。举例如下代码中的第18、20行:
1 package property; 2 3 public class Item { 4 String name; 5 int price; 6 7 public void buy(){ 8 System.out.println("购买"); 9 } 10 public void effect() { 11 System.out.println("物品使用后,可以有效果 "); 12 } 13 //其中LifePotion、MagicPosition类为Item类的子类 14 public static void main(String[] args) { 15 Item i1= new LifePotion();//类的多态性,父类指向子类对象 16 Item i2 = new MagicPotion(); 17 System.out.print("i1 是Item类型,执行effect打印:"); 18 i1.effect(); 19 System.out.print("i2也是Item类型,执行effect打印:"); 20 i2.effect(); 21 } 22 23 }
要实现类的多态,需要如下两个条件
1. 父类(接口)引用指向子类对象
2. 调用的方法有重写
接口的意义/使用多态的好处
如下代码
1 package charactor; 2 3 import property.Item; 4 import property.LifePotion; 5 import property.MagicPotion; 6 7 public class Hero { 8 public String name; 9 protected float hp; 10 11 public void useItem(Item i){ 12 i.effect(); 13 } 14 15 public static void main(String[] args) { 16 17 Hero garen = new Hero(); 18 garen.name = "盖伦"; 19 20 LifePotion lp =new LifePotion(); 21 MagicPotion mp =new MagicPotion(); 22 23 garen.useItem(lp); 24 garen.useItem(mp); 25 26 } 27 28 }
在第11~13行,只需要在Hero类中设计一个方法【方法的参数为父类或接口类的引用,该引用将指向子类引用所指向的对象】,通过父类引用/接口引用就可以调用不同子类重写的方法体甚至是在子类中增加的方法体。体现子方法的特殊性。