[BIT0429]-Java多态:父类引用指向子类对象的原理

  今天,我们来写一个小程序说明在多态中,父类引用指向子类对象的原理。在此之前我们简略提一下面向对象的三大特征:封装、继承、多态。而多态的前提有:继承、子类重写父类方法、父类引用指向子类对象。而多态前提的最后一个则涉及到程序静态时编译和动态时运行的区别,下面我们通过代码来说明。

首先創建一個“人”類,并定義一個“吃”的方法,表示所有“人”的對象都會吃飯。

package cn.bjsxt.oop03;
public class Person {
    public void eat() {
        System.out.println("人都會吃飯");
    }
}

創建幾個“人”類的子類:英國人、印度人和中國人,重寫“人”類的“吃飯”方法,表示這幾種人吃飯的獨特性:

package cn.bjsxt.oop03;
public class British extends Person{
    @Override
    public void eat() {
        // TODO Auto-generated method stub
        super.eat();
        System.out.println("英國人用刀叉吃飯");
    }
}
package cn.bjsxt.oop03;
public class Indian extends Person{
    @Override
    public void eat() {
        // TODO Auto-generated method stub
        super.eat();
        System.out.println("印度人用手抓飯吃");
    }
}
package cn.bjsxt.oop03;
public class Chinese extends Person{
    @Override
    public void eat() {
        // TODO Auto-generated method stub
        super.eat();
        System.out.println("中國人用筷子吃飯");
    }
}

除此之外,還有一種情況需要特別提出:所有的人可能都會去餐廳吃飯,因此我們創建了一個“食堂”類,以表示這一情況:

package cn.bjsxt.oop03;
public class Canteen {
    //定義如下方法,並將"人類"作為參數傳遞過來可以調用它自己吃飯的方法,然後在如下方法中表示人得在食堂吃飯
    public void eatInCanteen(Person person) {
        person.eat();
        System.out.println("人得在食堂吃飯");
    }
}

創建測試類:

package cn.bjsxt.oop03;
public class Test {
    public static void main(String[] args) {
        //父類引用指向之類對象
        Person person1=new British();
        Canteen.eatInCanteen(person1);
        Person person2=new Chinese();
        Canteen.eatInCanteen(person2);
        Person person3=new Indian();
        Canteen.eatInCanteen(person3);
    }
}

運行結果
人都會吃飯
英國人用刀叉吃飯
人得在食堂吃飯
人都會吃飯
中國人用筷子吃飯
人得在食堂吃飯
人都會吃飯
印度人用手抓飯吃
人得在食堂吃飯

2017/10/25 BIT创作,您可以免费转载和使用!(本模块博客是作者学习期间整理的学习心得,不是java技术的标准严格学习文档,仅作参考交流使用,对于使用本文档的后果,作者不作任何口头或书面的承诺)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值