为什么子类实例化的父类对象可以调用子类独有的方法?

假设有一个子类和一个父类,
父类 dad = new 子类();
这时dad不能调用子类独有的方法,只能调用子类重写了父类的方法
但是为什么可以在子类重写父类的方法中调用子类独有的方法

public class Dad {
     public void dad() {}
     }
     //这是父类

public class Son extends Dad{
    @Override            //重写方法
    public void dad() {
            this.son(); //这里可以调用子类独有的方法,但是对象是dad类的
    }
    public void son( ) {}//这是子类独有的方法
}
//这是子类

public class Text {
    public static void main(String[] args) {

        Dad dad = new Son();
        dad.son()//报错,调用不了
        dad.dad()//这样却可以间接调用son()




这是父类由子类实例化,new 后面是子类,则就是子类实例化,因为子类继承了父类,所以也继承了父类的方法和属性,当父类中有子类中没有的方法和属性时

子类调用此属性和方法时是父类中此属性和方法的值。当子类调用父类有相同的属性时,调用时是子类中定义的值。总的来说就是要看new后面谁,就是实例化谁。

在继承关系中,子类拥有父类和子类的方法,父类拥有自己的方法,所以无法调用子类,当父类方法被重写,父类对象调用的是子类重写的方法,这也就是多态的提现

可以了解下多态。 或者说面向对象的过程:封装,继承,多态。看看你就清楚了。

你要是想使用子类的特有方法需要使用向下转型,改为这么写
Dad dad = new Son();
Son son = (Son)dad;
son.son()//可以访问子类方法
dad.dad()//这个是重写的方法内部调用了特有方法

Dad dad = new Son();你这个都向上转型的,认得到就有鬼了兄弟

子类重写父类的这个方法后,谁执行这个独有的这个方法时,是动态分派的过程,此时相当于是子类调用的独有方法。
而且在java规定当中 重写方法不仅可以调用继承的变量和方法,还可以调用新方法和变量,也就是你说的调用独立方法
简而言之就是规定