关于 java 的动态绑定机制


首先我们要创建父类 Person 类

//创建父类
public class Person {
    //简单的创建两个属性
    private String name;
    private int age;

    //创建行为方法,方法中调用创建的say方法
    public void haviours(){
        say();
    }
    //创建方法
    public void say(){
        System.out.println("我是人类!!!");
    }

}

创建子类 Student

//创建子类
public class Student extends Person {
    //创建学生的属性
    private int  score;
    //重写行为
    public void haviours(){
        say();
    }
    //重写say方法
    public void say(){
        System.out.println("我是学生!!!");
    }
}

首先我们对 say 方法进行调用。

public class Demo01 {
    public static void main(String[] args) {
        //创建学生
        Person student = new Student();
        //调用学生的say()方法,由于我们的编译类型是Person类,而运行类型是Student类,而动态绑定机制是绑定运行类型。
        //所以,当我们调用say()方法时,是调用Student类的say()方法
        student.say();//返回“我是学生”
        //、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
        //如果我们将student类的say()方法注销,他寻找student类的say方法无果后,会再向它的父类调用say方法。返回我是人类,效果等同于

    }
}

但是,重点来了。。。。。。。。。。。。
如果我们调用的是 haviours 方法,那么他的方法是调用什么呢

public class Demo02 {
    public static void main(String[] args) {
        //创建学生
        Person student = new Student();
        //调用学生的haviours方法,由于我们的编译类型是Person类,而运行类型是Student类,而动态绑定机制是绑定运行类型。
        //所以,当我们调用haviours()方法时,该对象绑定的是Student类,所以是调用Student类的say()方法
        student.haviours();//返回我是学生!!!
    }
}

但是,还有人可能会有疑问,如果 Student 类中的 havious 方法被注释掉呢,你是不是会想。子类 Student 中没有 havious 方法,调用父类的 havious 方法,然后 havious 调用父类的 say 方法???
抱歉了,他调用的是子类 Student 的 Say 方法

public class Demo03 {
    public static void main(String[] args) {
        //创建学生
        Person student = new Student();
        //调用学生的haviours方法,由于我们的编译类型是Person类,而运行类型是Student类,而动态绑定机制是绑定运行类型。
        //所以,当我们调用haviours()方法时,由于子类没有havious方法,调用父类的havious方法,在父类的havious中,调用say方法,这时,动态绑定机制是绑定运行类型。该对象绑定的是Student类,所以是调用Student类的say()方法
        student.haviours();//返回我是学生!!!
    }
}

介绍完动态邦迪机制对方法的绑定,接下来说一说对属性的影响。

当调用对象的属性时,没有动态绑定机制,哪里声明就使用哪里。这句话十分容易理解。
也就是动态绑定机制对属性没有影响,放心调用。

本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;

2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;

3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;

4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;

5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/293448.html

(0)
上一篇 2022年11月24日
下一篇 2022年11月24日

相关推荐

发表回复

登录后才能评论