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

    动态绑定的概念:
    动态绑定是对象调用方法时的默认处理方式,对象的声明类型是多变的,
    在实际运行过程中,虚拟机能自动选择调用哪个方法,这样的过程叫做动态绑定。
    x.f(String) D extends X;
    处理的过程
    1.编译器查看对象的声明类型与方法名,
    此时编译器会记录类C中名为f的所有方法和及其超类中访问修饰符为public名为f的方法;
    2.其次要进行重载解析,
    重载解析在于,编译器会根据运行时传递的参数的类型来查找f方法;
    3.如果是private ,static, final修饰的方法或者构造器,编译器直接可以知道调用的是哪个方法,
    这种调用方式称为静态绑定。反之,调用的方法依赖于隐式参数的实际类型来动态的绑定,
    才能确定调用哪个方法。
    4.如何进行动态绑定调用方法,首先虚拟机会为每个类创建一个区,存放方法表的。
    每个类都有自己的方法表,子类也有超类的方法表和自己添加的方法表。
    虚拟机运行时,会明确x的声明类型,如果是X类型,虚拟机就会搜索X类型中的方法表,通过参数类型
    找到相应的方法;如果是D类型,那么就会搜索D类型的方法表,找到就执行,没有就报错!

    overload:重载
    override:重写,子类的重写的访问权限应该不小于超类的访问权限,编译不能通过,
    提示Cannot reduce the visibility of the inherited method from Employee
    试图降低访问权限。

    final

    修饰的方法称为不可扩展的类,不可继承的类。
    修饰类 定义在声明部分,final class Employee(){}
    修饰方法 定义在声明部分, public final method01(){}
    定义的方法不可在子类中覆盖,重写。
    修饰域 定义在成名部分, final String baseListObject
    对于域构造对象之后,就不允许改变他们的值了
    修饰局部变量 定义在形式参数中,public void method01(final BaseListObject baseListObject){}
    定义之后构造参数,或者传递过来的参数不允许修改。

  • 相关阅读:
    java中并发包简要分析01
    java中的集合包简要分析
    多线程学习——终结任务
    大型高并发高负载网站的系统架构
    An expression evaluator
    java公式解析器学习与开发(2)——前缀表达式
    java公式解析器学习与开发(1)
    程序员遇到bug时常见的30种反应
    图论--SCC强连通缩点--Tarjan
    图论--割边--Tarjan模板
  • 原文地址:https://www.cnblogs.com/alisonGavin/p/7430187.html
Copyright © 2011-2022 走看看