为什么子类重写父类的方法就会默认调用子类的方法

176 阅读1分钟

Object类是所有类的父类

在理解子类重写父类的方法就会默认调用子类的方法之前,我们需要认识一下Object类。

Object是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Object父类。即所有类的对象都可以使用Object的引用进行接收


class Person {//理解为class Person extends Object
    public String name = "GGBoy";
    
    @Override
    public String toString() { //重写了Object的tostring方法
        return "name: "+name;
    }
}

class Student extends Person {//理解为Student继承了Person,也继承了Object

}

public class Test {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person);



      /*  person.toString();//调用继承的tostring
 
        Object obj = new Person();向上转型
        Object obj2 = new Student();*/
    }
}

Object所有的方法

image.png

过程理解

image.png

第一幅图:实例化person后进行输出。

第二幅图:当我查看println的时候,Object后的 x 的数值为person,但接收它的却是Object,原因就是发生了向上转型。 x 的值又传给了valueof,随即我们查看valueof

第三幅图:valueof进行了空值判断。不为空就调用obj.toString方法,此时的toString方法有父类和子类重写的,此时进行下一步的动作为动态绑定。

第四幅子类图:若是子类重写了toString方法,则调用子类的toString方法。

第五幅父类图:若是子类没有重写toString方法,则调用父类的toString方法。

image.png

总结

子类重写父类的方法就会默认调用子类的方法?

1.理论上来说为动态绑定

2.通过过程图能够串起来理解。