java - 多态中的变量绑定(bind) VS 方法绑定(bind)

标签 java polymorphism

我观察到这样的行为,当我们从一个多态对象调用一个变量时,它会调用父变量,但是当我们用相同的多态对象调用一个方法时,它会调用子方法。为什么这是 Java 中的多态行为?为什么 Java 不以相同的方式处理多态变量和方法?

class Parent{

    int age =10;

    public void showAge(){

        System.out.println("Parent Age:"+age);
    }
}

class ChildOne extends Parent{

    int age = 20;

    public void showAge(){

        System.out.println("child one age:"+age);
    }
}

class ChildTwo extends Parent{

    int age = 30;

    public void showAge(){

        System.out.println("Child Two Age:"+age);
    }
}
public class Test{


    public static void main(String[] args) {

        Parent parentChildOne = new ChildOne();
        System.out.println("parentChildOne.age: "+parentChildOne.age);
        parentChildOne.showAge();

        Parent parentChildTwo = new ChildTwo();
        System.out.println("parentChildTwo.age: "+parentChildTwo.age);
        parentChildTwo.showAge();

    }
}

这是输出:

parentChildOne.age: 10
child one age:20
parentChildTwo.age: 10
Child Two Age:30

最佳答案

首先要记住你的变量不是多态的,下一个高潮就是你的this点

  Parent parentChildOne = new ChildOne();
  Parent parentChildTwo = new ChildTwo();

看看当您尝试使用 Parent parentChildOne 调用方法时,它应该调用子方法,因为它已被覆盖,并且根据多态性应该调用它。

现在再次看到 Parent parentChildOne 变量的相同对象,现在这里没有多态性但 jvm 现在正在处理它 shadowing 的概念br/>所以这就是为什么他们都表现出他们的真实行为
请按照shadowing in java的教程进行操作

关于java - 多态中的变量绑定(bind) VS 方法绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273759/

相关文章:

c++ - 多态性测试不起作用

java - 为什么我不能在从 HashMap 获得的对象上使用其他类的公共(public)方法?

java - Android 中的 fragment 事务错误不适用

java - 仅使用公共(public) API 在 JavaFX 中获取屏幕比例

java - 如何将作业对象实例传递给 quartz 调度程序

c++ - 如何从一个成员类/结构中获取一个类的成员数据?

java - java中作为递归参数的列表与数组

java - 在 Java 中,如何重定向 System.err 以进行特定方法调用?

c++ - 回调函数的应用

java - 继承与多态的区别