在这里怎么看java的动态绑定机制

问题遇到的现象和发生背景

动态绑定机制是多态的根源,这里的动态绑定机制应该怎么理解?

问题相关代码,请勿粘贴截图
public class test {
    private void print(){
        System.out.println("A");
    }
    public static void main(String[] args) {
        new test().print();

        test b = new B();
        b.print(); // A

        test c = new C();
        c.print();  // A

        new C().print();

        test d = new D();
        d.print();  // A
    }
}
class B extends test{
    private void print(){
        System.out.println("B");
    }
}
class C extends test{
    public void print(){
        System.out.println("C");
    }
}
class D extends test{
    public static void print(){
        System.out.println("D");
    }
}
我的解答思路和尝试过的方法
我想要达到的结果

之前的代码有点问题,其实就是想问在 public 类里写一个私有方法为什么它的子类都会访问到这个方法

因为c是A的引用,C的实例。
A类中有print方法,所以调用的是A类中的方法。

我想你发的代码不是你想要的结果,个人理解动态绑定指的是变量与实际的对象类型绑定是动态的,比如我下面print变量先后绑定的对象类型分别是A和B,当绑定的对象类型不同时,调用同样的方法可以执行不同的逻辑。自己多看多想多试自然就明白了


public class Main {
    public static void main(String[] args) {
        PrintAble print = new A();
        print.print();
        print = new B();
        print.print();
    }
}

interface PrintAble {
    void print();
}

class A implements PrintAble {
    @Override
    public void print() {
        System.out.println("A");
    }
}

class B implements PrintAble {
    @Override
    public void print() {
        System.out.println("B");
    }
}


补个回答,这个单纯就是向上转型和动态绑定的概念搞混了,test在这里既是父类也是子类,因为 print() 方法是私有的,所以子类的 print() 方法不算重写,向上转型后,引用是指向父类的空间的,也就是编译阶段是根据父类的方法来执行,不能执行子类特有的方法,一般父类的private方法向上转型后也是用不了的,但是这里父类也是主类,所以在这里能够执行那个父类的 private 方法

我不知道你这个代码哪儿来的,也不知道你有没有实际运行过。
A b = new B();这里会报错,B与A不是继承关系。就算有继承关系,new B().print()也会输出B
c.print()也输出的是C

img