Java多态陷阱之父类私有方法

2023年5月29日 411点热度 0人点赞 0条评论

父类中私有方法,子类中也有一个跟父类一样的方法。对于子类来说,这不是重写父类的方法。而是属于子类自己新的方法,因为父类的私有方法,子类是不可见的。

下面是一种特殊情况,父类的引用指向子类对象,但程序的入口方法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()这个方法的。父类的引用只能调用父类里的公有方法。

建议:在子类中最好不要定义跟父类私有方法同名的方法。

小小调酒师

此刻打盹,你将做梦; 此刻学习,你将圆梦。 个人邮箱:shellways@foxmail.com

文章评论