zoukankan      html  css  js  c++  java
  • 动态绑定多态

    动态绑定也指多态:是指在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法,

    下面的例子是根据Lady对象的成员变量pet所引用的不同的是积累形成而调用相应的enjoy方法

     

    多态:要有继承;要有重写;父类引用指向子类对象

     

    当这三个对象都被满足的时候调用父类里面被重写的方法,实级当中new 的是哪一个子类对象就调用哪一个子类的方法

    class Aniaml {

      public String name;

      Animal (String name) {

      this.name = name;

      public void enjoy(){
        System.out.println("叫声......");
        }

      }

    }

     

    class Cat extends Animal {

      private String eyeColor;

      Cat(String n,String f) {

        super(n);

        this.eyeColor = eyeColor;

      }

      public void enjoy() {

        System.out.println("猫叫声......");

      }

    }

     

    class Bird extends Animal {

      private String featherColor;

      Bird(String n,String f) {

        super(n);

        featherColor = f;

      }

      public void enjoy() {

        System.out.println("鸟叫声.....");

       }

    }

     

    class Lady {

      private String name;

      private Animal pet;

      Lady(String name,Animal pet) {

        this.name = name;

        this.pet = pet;

      }

      public void myEnjoy(){

        pet.enjoy();

      }

    }

     

    public class Test {

      public static void main(String args[]) {

        //Lady l3 = new Lady("l3",new Bird("birthname","green"));

        Cat c = new Cat("catname","blue");

        Bird d = new Bird("dogname","black");

        Lady l1 = new Lady("l1",c);

        Lady l2 = new Lady("l2",d);

      }

    }

    如果按道理来说他应该打印叫声...,但是事实上他打印的是,猫叫声.....和狗叫声...... ,这也就牵扯到我们 的动态绑定也称多态。

    来看我们的内存的图:

     

     

     

     

  • 相关阅读:
    C#对List排序的三种方式的比较
    unity跨平台及热更新学习笔记-C#中通过程序域实现DLL的动态加载与卸载
    总结下C#中有关结构体的几个问题
    C#中通过逻辑^(异或)运算交换两个值隐藏的巨坑!!!
    unity实现批量删除Prefab上Miss的脚本组件
    Oracle构造列思想,decode,case,sgin,pivot四大金刚
    Oracle-计算岁数
    Oracle 集合
    Oracle 综合例子应用01
    Oracle 事实表,维表,多对多
  • 原文地址:https://www.cnblogs.com/white-the-Alan/p/10183008.html
Copyright © 2011-2022 走看看