在实践中理解把握复杂的知识

 

 

 以下是运行结果:

 

 我们来分析一下为何会有如下结果:

首先

Parent parent=new Parent();
parent.printValue();
Child child=new Child();
child.printValue();

分别输出父类和子类各自的myValue,100和200没有什么疑问。

接着

parent=child;
parent.printValue();

子类对象赋值给了父类对象父类对象的myValue,以及printValue函数被子类对象覆盖了所以是Child200

parent.myValue++;
parent.printValue();

这时输出的是200可见maValue++中的myValue应该是父类中的。

我们可以验证一下将子类的输出函数改为这样System.out.println("Child.printValue(),myValue="+myValue+" "+super.myValue);

让子类在后面输出父类的myValue。

以下是运行结果:

 101说明修改的是父类的。

((Child)parent).myValue++;
parent.printValue();

将父类强制转化为子类,所以修改的是子类的myValue输出了201。

综上所述我们可以得到这样的结论:

子类的同名方法和变量会覆盖父类的方法和变量;

可将子类对象赋值给父类对象,但此时调用的函数是子类的函数,变量时父类的变量;

可以将父类强制转化为子类,从而使用子类的变量。

posted @ 2020-10-21 17:08  风吹过半夏  阅读(129)  评论(0编辑  收藏  举报