子类只能覆盖超类中“可以直接访问”的方法,否则即使在子类中定义了一个与超类中形式一样的方法,也没有覆盖,只是一个同名方法而已。此时,子类中拥有两个名字相同的方法:其中一个是从超类中继承的不可访问方法,另一个就是自己定义的方法
//OverridingPrivate.java
//You can not override a private method from super class
package com.msn.spaces.bryantd001;
class SuperClass{
private void showMessage(){
System.out.println("This is a private method in the super class.");
}
}
public class OverridingPrivate extends SuperClass{
//超类中的private方法对于子类是不可见的,因此这里并没有覆盖
public void showMessage(){
//super.showMessage(); super代表一个超类对象,其不能调用自身的private方法
System.out.println("This is a 'Overriding method' in the super class.");
}
public static void main(String[] args){
OverridingPrivate opObj=new OverridingPrivate();
opObj.showMessage();
SuperClass scObj=opObj; //向上转型
//这里出错的原因是子类的showMessage()方法并没有覆盖超类的同名方法
//然而scObj仍然企图利用多态的性质(超类引用指向子类对象后,可以调用子类中的同名方法,前提是覆盖了超类的同名方法)
//scObj.showMessage();
}
}