码迷,mamicode.com
首页 > 其他好文 > 详细

多态及练习题

时间:2020-06-26 00:57:11      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:提高   static   创建   xtend   扩展性   oid   程序实现   cat   stat   

多态就是父类引用指向子类对象 例如Animal a = new Dog();//向上转型

多态必须使用向下转型的时候:当在其他类中调用子类对象中独有的方法的时候需要向下转型 Animal a = new Dog(); Dog d = (Dog) a;//向下转型

多态在实际中的应用实际上就是为了程序的扩展性,OCP原则,关闭修改性,提高可扩展性,尽可能的少修改代码

/*
测试多态
1.编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。
可以弹奏的乐器包括二胡、钢琴和琵琶。
    实现思路及关键代码:
        1)定义乐器类Instrument,包括方法makeSound()
        2)定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin
        3)定义乐手类Musician,可以弹奏各种乐器play(Instrument i)
        4)定义测试类,给乐手不同的乐器让他弹奏
*/
public class TestMusic 
{
    public static void main(String[] args) 
    {
        Musician m = new Musician();
        Violin v = new Violin();
        m.play(v);
    }
}
class Instrument
{
    public void makeSound(){
        System.out.println("乐器发声");
    }
}
class Erhu extends Instrument
{
    public void makeSound(){
        System.out.println("二胡在拉");
    }
}
class Piano extends Instrument
{
    public void makeSound(){
        System.out.println("弹钢琴");
    }    
}
class Violin extends Instrument
{
    public void makeSound(){
        System.out.println("拉小题琴");
    }    
}
class Musician
{
    public void play(Instrument i){
        i.makeSound();
    }
}
/*
编写程序模拟“主人”喂养“宠物”的场景:
提示1:
    主人类:Master
    宠物类:Pet
    宠物类子类:Dog、Cat、YingWu
提示2:
    主人应该有喂养的方法:feed()
    宠物应该有吃的方法:eat()
    只要主人喂宠物,宠物就吃。

要求:主人类中只提供一个喂养方法feed(),要求达到可以喂养各种类型的宠物。

编写测试程序:
    创建主人对象
    创建各种宠物对象
    调用主人的喂养方法feed(),喂养不同的宠物,观察执行结果。

通过该案例,理解多态在开发中的作用。
重要提示:feed方法是否需要一个参数,参数选什么类型!!!
*/

class Testfeed{
    public static void main(String[] args) 
    {
        //创建一个宠物对象
        Pet pet = new Pet();
        //创建一个狗对象
        Dog dog = new Dog();
        //创建一个主人对象
        Master master = new Master();
        //调用主人投喂方法
        master.feed(dog);
    }
}
class Pet{//创建宠物类让其它类都继承他
    public void eat(){//创建宠物吃方法
        System.out.println("动物在吃");
    }
}
class Dog extends Pet//创建狗类
{
    public void eat(){//覆盖父类吃方法对吃方法重写
        System.out.println("狗在吃");
    }
}
class Cat extends Pet
{
    public void eat(){
        System.out.println("猫在吃");
    }
}
class YingWu extends Pet
{
    public void eat(){
        System.out.println("鹦鹉在吃");
    }
}
class Master
{
    
    public void feed(Pet p){//此处实际上是 Pet p = new Dog();此处涉及到父类引用指向子类对象,即多态
        p.eat();//调用父类吃方法,此处为编译器识别通过,具体调用哪个子类的吃方法还要看动态绑定的那个子类是啥
    }
}

 

多态及练习题

标签:提高   static   创建   xtend   扩展性   oid   程序实现   cat   stat   

原文地址:https://www.cnblogs.com/alexliuf/p/13193476.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!