zoukankan      html  css  js  c++  java
  • java——重载解析、静态绑定、动态绑定

    重载解析:

      a被声明为A类型的对象,调用method()方法时,如果有多个同名方法,参数不同,编译器将列举所用类A的method()方法和所用父类中public类型的method()方法,编译器查看这些方法的参数列表,选择完全匹配的,调用该方法。

    静态绑定(编译时绑定):

      当程序的方法运行采用静态绑定,虚拟机一定调用对象的实际类型最合适的类的方法。

    动态绑定(运行时绑定):

      所有父类类型的引用可以调用父类的所有(这里和静态绑定不同)属性和方法,但是子类定义而父类没有定义的方法是不可以调用的(这里也不同)

    public class exp {
        public static void main(String[] args) {
            BaseClass sub = new SubClass();
            sub.method1();//baseclass method1
            sub.method3();//subclass method3    
            // sub.method2();//报错:The method method2() is undefined for the type BaseClass
            System.out.println();
            
            SubClass sub2 = new SubClass();
            sub2.method1();//baseclass method1
            sub2.method2();//subclass method2
            sub2.method3();//subclass method3
        }
    }    
    class BaseClass{
        public void method1() {
            System.out.println("baseclass method1");
        }
        public void method3() {
            System.out.println("baseclass method3");
        }
    }
    class SubClass extends BaseClass{
        public void method2() {
            System.out.println("subclass method2");
        }
        public void method3() {
            System.out.println("subclass method3");
        }
    }
        

      从这个例子可以看出,使用父类类型的引用指向子类的对象时,该引用只能调用父类中已经定义的方法和变量,子类中新创建的方法不能用。如果子类重载父类方法,该引用调用的就是子类的方法。

      这样来看,好像静态绑定就是这种:

    Dog dog = new Dog();

      而动态绑定就是这种:

    Animal a = new Dog();

      emmm, 目前来看我是这样理解的。

  • 相关阅读:
    webpack devServer配置项的坑
    app混合开发 fastlick.js 在ios上 input标签点击 不灵敏 处理
    vue 学习八 自定义指令
    Verilog数值大小比较
    Verilog实现Matlab的fliplr函数
    基本不等式
    如何读取ila数据
    Xilinx FPGA时钟IP核注意事项
    FPGA Turbo译码器注意事项
    EbN0转SNR
  • 原文地址:https://www.cnblogs.com/gaoquanquan/p/9695840.html
Copyright © 2011-2022 走看看