首页 > 编程语言 >java中的动态绑定机制

java中的动态绑定机制

时间:2022-12-14 22:12:32浏览次数:45  
标签:getI java int sum 绑定 sum1 return 动态 public

本文主要讲述java中的动态绑定机制。

老韩ppt关于动态绑定机制:

vip

示例代码如下:

public class DynamicBinding {
    public static void main(String[] args) {
        A a = new B();
        // 编译时是A类,运行时是B类。
        System.out.println(a.sum()); // 40
        System.out.println(a.sum1()); // 30
    }
}
class A {
    public int i = 10;
    public int getI(){
        return i;
    }
    public int sum(){
        return getI() + 10;
    }
    public int sum1(){
        return i + 10;
    }
}
class B extends A {
    public int i = 20;
    public int sum(){
        return i + 20;
    }
    public int getI(){
        return i ;
    }
    public int sum1(){
        return i + 10;
    }
}

运行结果:

 若将B中的sum()和sum1()方法注释:

public class DynamicBinding {
    public static void main(String[] args) {
        A a = new B();
        // 编译时是A类,运行时是B类。
        System.out.println(a.sum()); // 30
        System.out.println(a.sum1()); // 20
    }
}
class A {
    public int i = 10;
    public int getI(){
        return i;
    }
    public int sum(){
        return getI() + 10;
    }
    public int sum1(){
        return i + 10;
    }
}
class B extends A {
    public int i = 20;
//    public int sum(){
//        return i + 20;
//    }
    public int getI(){
        return i ;
    }
//    public int sum1(){
//        return i + 10;
//    }
}

运行结果如下:

原因:

A a = new B();

编译阶段,a是A类,运行阶段,a是B类。当B中的sum()方法和sum1()方法注释时,

a.sum(),首先在B类中查找sum()方法,发现没有,接着在B的父类A中继续查找sum()方法,但是在sum()方法中有getI()方法,与B中的getI()方法有重写关系,此时应该调用哪个getI()方法呢?应该调用B中getI()方法,返回B类的成员变量 i = 20。

a.sum1(),首先在B类中查找sum1()方法,发现没有,接着在B的父类A中继续查找sum()1方法,由于sum1()中运用属性i,根据就近原则,这里的i即为A中的成员变量 i = 10。

引入动态绑定机制的概念:

1.当调用对象方法时,该方法会与【运行类型】对象的内存地址绑定。

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

 

标签:getI,java,int,sum,绑定,sum1,return,动态,public
From: https://www.cnblogs.com/zwgitOne123/p/16983778.html

相关文章

  • 01-彻底搞懂java的值传递
    01-彻底搞懂java的值传递在java的参数传递中,只有一种情况,就是值传递值传递指的是在方法中,会将原始变量拷贝一份出来,进行处理基本数据类型基本数据类型值就保存在变量......
  • ASP.NET Core 奇淫技巧之动态WebApi
    一.前言接触到动态WebApi(DynamicWebAPI)这个词的已有几年,是从ABP框架里面接触到的,当时便对ABP的这个技术很好奇,后面分析了一波,也尝试过从ABP剥离一个出来作为独立组件来使......
  • JavaScript学习--Item1 严格模式
    一、概述除了正常运行模式,ECMAscript5添加了第二种运行模式:“严格模式”(strictmode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。设立”严格模式”的目的,主要......
  • [JAVA反序列化]Javacc链1分析
    文章目录​​写在前面​​​​动态代理​​​​简单介绍​​​​动态代理的实现​​​​JavaCC链1分析​​​​参考文章​​写在前面这几天算是好好一边审计PHP的一些CMS一......
  • java.security.NoSuchAlgorithmException:Cannot find any provider supporting AES/C
    由于小程序开发的需求,需要在后台对微信接口返回的敏感信息加密数据进行解密,以便开发使用,但是,在解密时出现以下异常:java.security.NoSuchAlgorithmException:Cannotfindan......
  • 静态包含和动态包含的区别
    静态包含  vs  动态包含的区别?1)语法不同静态包含语法:<%@incluefile="被包含的页面"%>动态包含语法:<jsp:includepage="被包含的页面">2)参数传递不同......
  • 深入分析JavaWeb 25 -- 自定义标签开发案例和打包自定义标签库
    一、开发标签库案例1.1、开发防盗链标签1、编写标签处理器类:RefererTag.javapackageme.gacl.web.simpletag;importjava.io.IOException;importjavax.servlet.http.Ht......
  • 结合Spring Cloud Bus实现配置动态刷新
    在上一节中我们学习了在SpringCloud微服务系统架构中使用ConfigServer进行本地仓库配置读取和线上环境的远程仓库git配置读取,让我们在多个微服务下也可以进行配置信息的......
  • java 常见基础题
    Java中==和equals和hashCode的区别基本数据类型的​​==​​比较的值相等.类的​​==​​​比较的内存的地址,即是否是同一个对象,在不覆盖​​equals​​​的情况下,同比较内......
  • Java中的抽象与封装
    封装形式封装是四个基本的OOP概念之一。其他三个是继承,多态和抽象。Java中的封装是一种将数据(变量)和作用于数据(方法)的代码包装为一个单元的机制。在封装中,一个类的变量将......