java_多态学习的小问题

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

根据网上视频学习的Java多态学习中

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
public class Fiel {
public static void main(String[] args) {
    Sub s = new Sub();
    System.out.println(s.count);
    s.dispay();
    Base b = s;
    System.out.println(b == s);
  System.out.println(b.count);
    b.display();
}
}
class Base{
    int count = 10;//数目
    public void display() {
        System.out.println(this.count);
    }
    
}
class Sub extends Base{
    int count =20;
    public void dispay() {
        System.out.println(this.count);
    }
}

运行结果及详细报错内容

运行结果是:
20
20
true
10
10
按照视频中所给与的最后一行(10)的输出应该是b.display();输出为20为什么为 10?

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

这里的b.display()为何不为20?

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

@Override就可以了


package csdn20230128;

/**
 * @Description
 * @Author wangFei
 * @Date 2023/1/28 11:32
 * @Version 1.0
 **/
public class Fiel {
    public static void main(String[] args) {
        Sub s = new Sub();
        System.out.println(s.count);
        s.display();
        Base b = s;
        System.out.println(b == s);
        System.out.println(b.count);
        b.display();
    }
}
class Base{
    int count = 10;//数目
    public void display() {
        System.out.println(this.count);
    }

}
class Sub extends Base{
    int count =20;
    @Override
    public void display() {
        System.out.println(this.count);
    }
}

因为b是Base类的实例,而Sub类中的display方法没有被声明为重写父类的display方法,所以b.display()调用的是父类的方法。如果要调用子类的方法,需要添加Override声明。

class Sub extends Base{
    int count =20;
    @Override
    public void display() {
        System.out.println(this.count);
    }
}

这里不涉及多态
Sub 里的count并没有对Base里的count进行重写,你执行b.display()打印的就是base里的count
类似你在sub里执行base.count
这完全就是个全局变量与局部变量的问题
既然count这个变量不涉及重写,你完全可以把它改成int a和int b,那么就一目了然了