方法覆盖(override)”的要点

class Father{
public void printValue() {
System.out.println("Parent.printValue()JmyValue");
}
}
class Son extends Father{
public void printValue() {
super.printValue();
System.out.println("Child.printValue()JmyValue");
}
}
public class ParentTest {
public static void main(String[] args) {
Son son =new Son();
son.printValue();
}
}

程序截图:

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

class Parent{
public int myValue=100;
public void printValue() {
System.out.println("Parent.printValue()JmyValue="+myValue);
}
}
class Child extends Parent{
public int myValue=200;
public void printValue() {
System.out.println("Child.printValue()JmyValue="+myValue);
}
}
public class ParentChildTest {
public static void main(String[] args) {
Parent parent=new Parent();
parent.printValue();
Child child=new Child();
child.printValue();
parent=child;
parent.printValue();
parent.myValue++;
parent.printValue();
((Child)parent).myValue++;
parent.printValue();
}
}

预判结果:

Parent.printValue()JmyValue=100
Child.printValue()JmyValue=200
Child.printValue()JmyValue=200
Child.printValue()JmyValue=201
Child.printValue()JmyValue=202

实际结果:

Parent.printValue()JmyValue=100
Child.printValue()JmyValue=200
Child.printValue()JmyValue=200
Child.printValue()JmyValue=200
Child.printValue()JmyValue=201

误差分析:忽略了myValue++与++myValue的区别,使倒数第一和倒数第二的输出结果相差1。

心得体会:

我们可以结看作,父类是范围比较大的,而子类是范围比较小的,所以子类可以赋值给父类,而将父类赋值给子类就需要进行强制转化。