继承模式多态&接口模式多态

多态: 都是同一个类型,调用同一个方法,却能呈现不同的状态

这主要体现在   将父类引用变量可以指向子类空间,当指向不同子类空间时,则调用同一个方法,有不同结果。

(1)父类引用变量实现多态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

 
publicclass Item {
    String name;
    intprice;
 
    publicvoid buy(){
        System.out.println("购买");
    }
    publicvoid effect() {
        System.out.println("物品使用后,可以有效果 ");
    }
     
    publicstatic void main(String[] args) {
        Item i1= newLifePotion(); //LifePotion的方法与 MagicPotion的方法不一样
        Item i2 = newMagicPotion(); // 因此这里体现多态
        System.out.print("i1  是Item类型,执行effect打印:");
        i1.effect();
        System.out.print("i2也是Item类型,执行effect打印:");
        i2.effect();
    }
 
}
如果一个方法的输入参数为 父类类型,则 子类对象也可以成功输入,这也体现了多态。
但是在 父类引用变量(实际指向子类空间)  只能执行 父类中定义过的方法(可以被重载)和父类定义过的实例变量。不能执行父类没有定, 但是子类中定义过的方法。


(2)  接口实现多态(接口也相当于一个类 也会有自己的引用变量)

public class StartGame {
public static void main(String[] args){
Hero character1=new Hero();
APHero character2=new APHero();
ADHero character3=new ADHero();
ADAPHero character4=new ADAPHero();
character1.kill(character2);
character1.kill(character3);
character1.kill(character4);
}
}
 class Hero  {
    String name;   
    float hp;     
    float armor;      
    int moveSpeed;    
    public void kill (Mortal m){                                         //  以接口的Mortal 类型作为引用变量  实现多态
    m.die();                                                                 //   因为 ADHero、APHero、ADAPHero 执行Mortal
    }                                                                                //   方法  所以赋给  接口引用变量m
}
class ADHero extends Hero implements Mortal{          //  ADHero  继承Hero  执行 Mortal 接口
public void die(){
System.out.println("ADHero die");
}
}
class APHero extends Hero implements Mortal{          // APHero   继承Hero  执行  Mortal接口
public void die(){
System.out.println(" APHero die");
}
}
class ADAPHero extends Hero implements Mortal{      // ADAPHero  继承 Hero  执行 Mortal接口
public void die(){
System.out.println(" APADHero die");
}
}
interface Mortal{                                                               // Mortal 接口定义  空方法   
public void die();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值