Java的动态绑定机制(重要)

动态绑定机制说明:

1.当调用对象方法时,该方法会和该对象的内存地址(运行类型)绑定

2.当调用对象属性时,没有对象绑定机制,哪里声明,哪里使用

源代码:

java 复制代码
public class DynamicBinding {
    public static void main(String[] args) {
        A a = new B();
        System.out.println(a.sum());//40
        System.out.println(a.sum1());//30
    }
}
class A{//父类
    public int i = 10;
    public int sum(){
        return getl() + 10;
    }
    public int sum1(){
        return i + 10;
    }
    public int getl(){
        return i;
    }
}
class B extends A{
    public int i = 20;
    public int sum(){
        return i + 20;
    }
    public int getl(){
        return i;
    }
    public int sum1(){
        return i + 10;
    }
}

当把B类中的sum()注销掉,再去执行System.out.println(a.sum())

此时结果为30

java 复制代码
public class DynamicBinding {
    public static void main(String[] args) {
        A a = new B();
        //当调用对象方法时,该方法会和该对象的内存地址(运行类型)绑定
        //也就是说,调用的对象是哪个类型,就去找这个类型中的方法
        System.out.println(a.sum());//30
        //当执行到a.sum()中的return getl() + 10时,由于运行类型是B,所以会去调用B类中的
        //getl()方法,此时return i;返回的是B中的i值
        
        System.out.println(a.sum1());//当调用对象属性时,没有对象绑定机制,哪里声明,哪里使用
        //属性没有对象绑定机制,输出20
    }
}
class A{//父类
    public int i = 10;
    public int sum(){
        return getl() + 10;//20+10
    }
    public int sum1(){
        return i + 10;
    }
    public int getl(){
        return i;
    }
}
class B extends A{
    public int i = 20;
//    public int sum(){
//        return i + 20;
//    }
    public int getl(){
        return i;
    }
//    public int sum1(){
//        return i + 10;
//    }
}
相关推荐
海琴烟Sunshine5 分钟前
leetcode 338. 比特位计数 python
python·算法·leetcode
lang2015092819 分钟前
深入掌握 Maven Settings:从配置到实战
java·maven
scx_link21 分钟前
修改JetBrains产品(IntelliJ IDEA 、PyCharm等软件)的默认插件和日志的存储位置
java·pycharm·intellij-idea
BUG?不,是彩蛋!21 分钟前
Maven-Java 项目到底解决了什么痛点?
java·servlet·maven
小池先生22 分钟前
idea配置代码注释模板
java·ide·intellij-idea
inferno23 分钟前
Maven基础(一)
java·开发语言·maven
摇滚侠28 分钟前
Spring Boot3零基础教程,Reactive-Stream 规范核心接口,笔记103
java·spring boot·笔记
csbysj202030 分钟前
SQLite Truncate Table: 完全删除表中的数据
开发语言
闻缺陷则喜何志丹1 小时前
【贪心 字典序 回文 最长公共前缀】LeetCode3734. 大于目标字符串的最小字典序回文排列|分数未知
c++·算法·力扣·贪心·字典序·回文·最长公共前缀
tung tung tung sahur1 小时前
领略 Rust 抽象之美:自定义迭代器实现全解析
开发语言·后端·rust