zoukankan      html  css  js  c++  java
  • 使用引用类型变量来访问所引用对象的属性和方法时,Java 虚拟机绑定规则

    通过引用类型变量来访问所引用对象的属性和方法时,Java 虚拟机将采用以下绑定规则:

    • 实例方法与引用变量实际引用的对象的方法进行绑定,这种绑定属于动态绑定,因为是在运行时由 Java 虚拟机动态决定的。例如,animal.eat() 是将 eat() 方法与 Cat 类绑定。
    • 静态方法与引用变量所声明的类型的方法绑定,这种绑定属于静态绑定,因为是在编译阶段已经做了绑定。例如,animal.staticEat() 是将 staticEat() 方法与 Animal 类进行绑定。
    • 成员变量(包括静态变量和实例变量)与引用变量所声明的类型的成员变量绑定,这种绑定属于静态绑定,因为在编译阶段已经做了绑定。例如, animal.name 和 animal.staticName 都是与 Animal 类进行绑定

    父类 Animal 的代码如下:

    public class Animal
    {
        public String name="Animal:动物";
        public static String staticName="Animal:可爱的动物";
        public void eat()
        {
            System.out.println("Animal:吃饭");
        }
        public static void staticEat()
        {
            System.out.println("Animal:动物在吃饭");
        }
    }

    子类 Cat 的代码如下

    public class Cat extends Animal
    {
        public String name="Cat:猫";
        public String str="Cat:可爱的小猫";
        public static String staticName="Dog:我是喵星人";
        public void eat()
        {
            System.out.println("Cat:吃饭");
        }
        public static void staticEat()
        {
            System.out.println("Cat:猫在吃饭");
        }
        public void eatMethod()
        {
            System.out.println("Cat:猫喜欢吃鱼");
        }
        public static void main(String[] args)
        {
            Animal animal=new Cat();
            Cat cat=(Cat)animal;    //向下转型
            System.out.println(animal.name);    //输出Animal类的name变量
            System.out.println(animal.staticName);    // 输出Animal类的staticName变量
            animal.eat();    //输出Cat类的eat()方法
            animal.staticEat();    //输出Animal类的staticEat()方法
            System.out.println(cat.str);    //调用Cat类的str变量
            cat.eatMethod();    //调用Cat类的eatMethod()方法
        }
    }

    运行时将会输出如下结果:

    Animal:动物
    Animal:可爱的动物
    Cat:吃饭
    Animal:动物在吃饭
    Cat:可爱的小猫
    Cat:猫喜欢吃鱼
  • 相关阅读:
    php微信支付v3版签名生成,代金券、微信支付分、支付即服务等
    docker基本命令及搭建php环境
    Nginx 负载均衡搭建
    laravel4.2 union联合,join关联分组查询最新记录时,查询条件不对,解决方案
    抓取腾讯视频弹幕
    laravel4.2 Redis 使用
    201771010106-东文财 实验一 软件工程准备-<构建之法与博客首秀>
    东文财201771010106《面向对象程序设计(java)》.18
    东文财201771010106《面向对象程序设计(java)》17
    201771010106东文财《面向对象程序设计(java)》实验16
  • 原文地址:https://www.cnblogs.com/lfxiao/p/10672160.html
Copyright © 2011-2022 走看看