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()方法,子类均从中继承并重写该方法,方便扩展。

      内存分析:

  • 相关阅读:
    android之Activity回传数据
    Android之Activity启动模式
    桥接模式
    Android之Activity跳转
    Android多线程文件下载
    代理模式
    适配器模式
    vs2010 入门程序
    文件动态打开获取数据
    项目测试一 批量读取数据到数组
  • 原文地址:https://www.cnblogs.com/seven7seven/p/3656515.html
Copyright © 2011-2022 走看看