根据网上视频学习的Java多态学习中
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?
这里的b.display()为何不为20?
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,那么就一目了然了