zoukankan      html  css  js  c++  java
  • JAVA笔记9-多态(动态绑定、池绑定)

    1、动态绑定:执行期间(而非编译期间)判断所引用对象的实际类型,根据实际的类型调用相应方法。

    2、多态存在的三个必要条件(同时):继承、重写、父类引用指向子类对象

      这三个条件满足后,当调用父类中被重写的方法时,实际new的是哪个子类对象,就调用该子类的方法。

    例子:

    public class TestAnimal{
        public static void main(String args[]){
            Dog d=new Dog("dogname","black");
            Cat c=new Cat("catname","blue");
            Lady l1=new Lady("l1",c);
            Lady l2=new Lady("l2",d);
            l1.myPetEnjoy();//猫叫声。。。
            l2.myPetEnjoy();//狗叫声。。。
        }
    }
    
    class Lady{
            String name;
            Animal pet;
            Lady(String name,Animal pet){
                this.name=name;
                this.pet=pet;
            }
            void myPetEnjoy(){
                pet.enjoy();
            }
    }
    
    class Animal{
        public String name;
        Animal(String name){
            this.name=name;
        }
        void enjoy(){
            System.out.println("叫声。。。");
        }
    }
    
    class Dog extends Animal{
        public String furColor;
        Dog(String name,String furColor){
            super(name);
            this.furColor=furColor;
        }
        void enjoy(){
            System.out.println("狗叫声。。。");
        }
    }
    
    class Cat extends Animal{
        public String eyesColor;
        Cat(String name,String eyesColor){
            super(name);
            this.eyesColor=eyesColor;
        }
        void enjoy(){
            System.out.println("猫叫声。。。");
        }
    }

      显然,Animal类型的引用pet指向Cat类型的对象,这时不能访问eyesColor。但对于方法的调用,是根据实际对象的类型,这是动态实现的。(指向方法的指针是动态指向的)这样可扩展性达到最佳。(相关题目见本博客【转】深入理解Java多态性)一个主意的应用就是在游戏设计中,基类有drawMyself()方法,子类均从中继承并重写该方法,方便扩展。

      内存分析:

  • 相关阅读:
    半主机模式和_MICROLIB 库
    工作中常用的git命令
    Mybatis延迟加载参数配置
    JUnit展示图形化测试结果
    可读、可维护、可扩展,原则、模式与重构
    乐观锁和悲观锁
    HashMap实现原理和底层数据结构?
    视图有啥用?
    单例模式常见有哪几种?
    RPC服务和HTTP服务的区别
  • 原文地址:https://www.cnblogs.com/seven7seven/p/3656515.html
Copyright © 2011-2022 走看看