父类中私有方法,子类中也有一个跟父类一样的方法。对于子类来说,这不是重写父类的方法。而是属于子类自己新的方法,因为父类的私有方法,子类是不可见的。
下面是一种特殊情况,父类的引用指向子类对象,但程序的入口方法main方法是放在父类里,父类的私有方法,对于引用来说是可见的。还记得对象调用方法的时候,会隐式传入一个this吗?这时候的引用father就相当于this,因此,实际上调用的的是this.eating();
最后的打印结果是:private eating() ...
public class Father { private void eating(){ System.out.println("private eating() ..."); } public static void main(String[] args) { Father father = new SubObject(); father.eating(); } } class SubObject extends Father{ public void eating(){ System.out.println("public eating ..."); } }
如果把入口方法main放在子类,则father.eating();语句会报错,因为对于子类来说,父类是没有eating()这个方法的。父类的引用只能调用父类里的公有方法。
建议:在子类中最好不要定义跟父类私有方法同名的方法。
文章评论