多态中的动态绑定

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


1.什么是动态绑定

在 Java 中, 调用某个类的方法, 究竟执行了哪段代码 (是父类方法的代码还是子类方法的代码) , 要看究竟这个引用指向的是父类对象还是子类对象. 这个过程是程序运行时决定的(而不是编译期), 因此称为动态绑定.

2.简单样例

people类

class people {
    
    
    public int age=100;
    public String name;
    public void look(){
    
    
        System.out.println("人在看手机");
    }
}

student类

public class student extends people{
    
    
    public String school;
    public int age=10;
    public void look(){
    
    
        System.out.println("学生在看书");
    }
}

主函数

public class Main {
    
    
    public static void main(String[] args) {
    
    
        people p1=new people();
        p1.look();
        people p2=new student();
        p2.look();
    }
}

运行结果
在这里插入图片描述

3.注意事项

p1和p2都是people类型的引用,但是前者指向的是people类型的实例,后者指向的是student类型的实例。
由运行结果可以得出,指向父类的实例就调用父类版本的look方法,指向子类的实例就调用子类版本的look方法。
如果look方法在父类和子类都存在,并且参数不同,此时调用look就不会涉及动态绑定,会根据传入参数的类型和个数,判断父类中是否有相匹配的方法,要是没有就会编译报错。

猜你喜欢

转载自blog.csdn.net/weixin_45070922/article/details/112971414