今天,我们来写一个小程序说明在多态中,父类引用指向子类对象的原理。在此之前我们简略提一下面向对象的三大特征:封装、继承、多态。而多态的前提有:继承、子类重写父类方法、父类引用指向子类对象。而多态前提的最后一个则涉及到程序静态时编译和动态时运行的区别,下面我们通过代码来说明。
首先創建一個“人”類,并定義一個“吃”的方法,表示所有“人”的對象都會吃飯。
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技术的标准严格学习文档,仅作参考交流使用,对于使用本文档的后果,作者不作任何口头或书面的承诺)