• 使用引用类型变量来访问所引用对象的属性和方法时,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:猫喜欢吃鱼
  • 相关阅读:
    Linux vi或vim替换
    Linux vi或vim统计字符出现次数
    Pycharm 操作Git
    离线安装 Python三方包
    Python 列表排序,sort函数,分组排序
    执行shell脚本,并把执行结果存入文件
    Git 拉取近期提交的代码
    Python base64编码和解码
    媒体信息源
    每日随笔
  • 原文地址:https://www.cnblogs.com/lfxiao/p/10672160.html
Copyright © 2020-2023  润新知