1) 运行课件中的例题ParentChildTest.java,回答下列问题:
a) 左边的程序运行结果是什么?
b) 你如何解释会得到这样的输出?
第一个创建一个Parent对象,调用的是父类构造方法
第二个创建一个Child对象,调用的是子类的构造方法
第三个将子类的child的值赋给了parent,调用的是子类的构造方法
第四个parent.myValue++是对父类中的变量进行自加运算,而parent.printValue()实际上还调用的还是子类的构造方法
第五个((child)parent).myValue++是将parent对象强制转化成Child,所以指向的是Child类中的变量进行自加运算之后输出的。
Parent对象创建时并不是创建的Child或Child的子类,那么是不能强制转换成子类的
不能把孩子的赋给父亲,在这个程序中必须是孩子继承父亲。
c) 计算机是不会出错的,之所以得到这样的运行结果也是有原因的,那么从这些运行结果中,你能总结出Java的哪些语法特性?
当子类与父类拥有一样的方法,并且让一个父类变成一用一个子类对象时,调用方法由对象自己的“真实”类型所决定,对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。
如果子类与父类有相同的的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段,而不是父类中的字段。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
如果子类被当作父类使用,则通过子类访问的字段是父类的。