本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
5分32秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项) 示例 1 : 操作符的多态 示例 2 : 观察类的多态现象 示例 3 : 类的多态条件 示例 4 : 类的多态-不使用多态 示例 5 : 类的多态-使用多态 示例 6 : 练习-多态 示例 7 : 答案-多态
同一个操作符在不同情境下,具备不同的作用
如果+号两侧都是整型,那么+代表 数字相加 如果+号两侧,任意一个是字符串,那么+代表字符串连接 package charactor;
public class Hero {
public String name;
protected float hp;
public static void main(String[] args) {
int i = 5;
int j = 6;
int k = i+j; //如果+号两侧都是整型,那么+代表 数字相加
System.out.println(k);
int a = 5;
String b = "5";
String c = a+b; //如果+号两侧,任意一个是字符串,那么+代表字符串连接
System.out.println(c);
}
}
观察类的多态现象:
1. i1和i2都是Item类型 2. 都调用effect方法 3. 输出不同的结果 多态: 都是同一个类型,调用同一个方法,却能呈现不同的状态 package property;
public class Item {
String name;
int price;
public void buy(){
System.out.println("购买");
}
public void effect() {
System.out.println("物品使用后,可以有效果 ");
}
public static void main(String[] args) {
Item i1= new LifePotion();
Item i2 = new MagicPotion();
System.out.print("i1 是Item类型,执行effect打印:");
i1.effect();
System.out.print("i2也是Item类型,执行effect打印:");
i2.effect();
}
}
package property;
public class LifePotion extends Item {
public void effect(){
System.out.println("血瓶使用后,可以回血");
}
}
package property;
public class MagicPotion extends Item{
public void effect(){
System.out.println("蓝瓶使用后,可以回魔法");
}
}
如果不使用多态,
假设英雄要使用血瓶和魔瓶,就需要为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);
}
}
如果物品的种类特别多,那么就需要设计很多的方法
比如useArmor,useWeapon等等 这个时候采用多态来解决这个问题 设计一个方法叫做useItem,其参数类型是Item 如果是使用血瓶,调用该方法 如果是使用魔瓶,还是调用该方法 无论英雄要使用什么样的物品,只需要一个方法即可 package charactor;
import property.Item;
import property.LifePotion;
import property.MagicPotion;
public class Hero {
public String name;
protected float hp;
public void useItem(Item i){
i.effect();
}
public static void main(String[] args) {
Hero garen = new Hero();
garen.name = "盖伦";
LifePotion lp =new LifePotion();
MagicPotion mp =new MagicPotion();
garen.useItem(lp);
garen.useItem(mp);
}
}
immortal是不朽的,不死的意思 mortal就是终有一死的,凡人的意思 1. 设计一个接口 接口叫做Mortal,其中有一个方法叫做die 2. 实现接口 分别让ADHero,APHero,ADAPHero这三个类,实现Mortal接口,不同的类实现die方法的时候,都打印出不一样的字符串 3. 为Hero类,添加一个方法,在这个方法中调用 m的die方法。 public void kill(Mortal m) 4. 在主方法中 首先实例化出一个Hero对象:盖伦 然后实例化出3个对象,分别是ADHero,APHero,ADAPHero的实例 然后让盖伦 kill 这3个对象
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|