zoukankan      html  css  js  c++  java
  • 动态绑定和静态绑定

    动态绑定

    动态绑定是指编译器在编译阶段不知道要调用哪个方法

    Parent父类,父类有两个方法一个是类方法shout,一个是实例方法say

    public class Parent {
        String name;
        public static void shout(){
            System.out.println("我是父类shout静态方法");
        }
    
        public void say(){
            System.out.println("我是父类say方法");
        }
    }

    Son子类继承父类,并重写了say实例方法

    public class Son extends Parent {
        String name;
        @Override
        public void say() {
            System.out.println("我是子类say");
        }
    }

    测试函数

    public class MainTest {
        public static void main(String[] args) {
            Parent parent = new Parent();
            Parent son = new Son();
            parent.say();
            son.say();
        }
    }

    声明的两个对象都是parent类型,但运行时他们指向的都是不同的对象类型

    虽然调用的是say方法但是编译器在编译阶段不能确定调用的是子类还是父类的方法,方法的动态绑定是基于实际的对象类型,而不是它们声明的对象引用类型

    静态绑定

    我们知道静态方法不能被重写,为什么呢,其实这就和静态绑定有关.编译器在编译期间就能完成绑定的叫做静态绑定也叫前期绑定,基本上实例方法都在运行时绑定,静态方法是静态绑定在编译期间就已经决定的

    给父类和子类同时加上静态方法

    public static void shout(){
            System.out.println("我是父类shout静态方法");
    }
    public static void shout(){
            System.out.println("我是子类shout静态方法");
    }

    测试

    public static void main(String[] args) {
            Parent parent = new Parent();
            Parent son = new Son();
            parent.shout();
            son.shout();
        }

    运行结果

    我是父类shout静态方法
    我是父类shout静态方法

    虽然java允许重写静态方法但是无效,调用的静态方法是父类的静态方法

    成员变量的静态绑定

    父类添加属性

    String name="parent";

    子类添加属性

    String name="son";

    测试

    public static void main(String[] args) {
            Parent parent = new Parent();
            Parent son = new Son();
            System.out.println(son.name);
            System.out.println(parent.name);
        }

    运行结果

    parent
    parent

    总结一下静态绑定存在于以下几种情况
    1. 类方法
    2. 私有方法(不会被继承)
    3. 访问成员变量

    原文地址:https://blog.csdn.net/JavaMoo/article/details/78776150
  • 相关阅读:
    unity导弹算法 预计目标点
    unity编辑器xml数据库插件
    简单Unity时间架构设计(克洛诺斯之匙)
    Unity武器系统的优化
    暴风魔镜安卓手柄输入检测接口
    基于unity的飞行模拟设计
    C#打印日志的小技巧
    启示录
    关于击杀与辅助奖励的方案
    unity抛物线,平均速度下的运动轨迹
  • 原文地址:https://www.cnblogs.com/jpfss/p/10978327.html
Copyright © 2011-2022 走看看