• 多态及练习题


    多态就是父类引用指向子类对象 例如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();//调用父类吃方法,此处为编译器识别通过,具体调用哪个子类的吃方法还要看动态绑定的那个子类是啥
        }
    }
    以粮为纲全面发展
  • 相关阅读:
    LeetCode_143. 重排链表
    LeetCode_844. 比较含退格的字符串
    LeetCode116. 填充每个节点的下一个右侧节点指针
    1002. 查找常用字符
    贝叶斯定理(Bayes' theorem)的理解笔记
    汉明码
    超级好用 音乐可视化软件-Specinker
    安卓安装aidlearning
    windows下gcc的安装和使用
    ubuntu桌面配置
  • 原文地址:https://www.cnblogs.com/alexliuf/p/13193476.html
Copyright © 2020-2023  润新知