在Java中访问私有方法

时间:2014-04-12 03:12:14

标签: java

在java中,私有访问修饰符具有高度限制性,只能在定义它们的类中访问。

考虑一下这个例子。

    package x;
    public class Boom {

    protected String name;

    public Boom() {

    }

    private void aConfidentialInfo(){
        System.out.println("Some confidential information...");
    }

    protected void display(){
        System.out.println("In display method..");
        aConfidentialInfo();
    }

}

package y;
import x.Boom;

public class Hack extends Boom{

    public Hack{
        display();
    }   

}

当我运行类Hack时,它会调用display,后跟aConfidentialInfo,它是类Boom的私有成员。类Hack如何能够访问类Boom的私有成员?是不是私人访问修饰符的侵权。如何用一些体面的推理来理解和解释这个?

2 个答案:

答案 0 :(得分:5)

不,它访问Boom- display的受保护成员。这是合法的 - 子类或包中的任何东西都可以访问受保护的成员。受保护的函数可以访问私有成员,因为受保护的函数是Boom类的一部分。

答案 1 :(得分:3)

由于多态性的 magic ,这是可能的。

Hack 扩展 Boom,因此可以访问所有公共,包和受保护的字段和方法。因此,它可以调用受保护的display()方法。借助多态的魔力,在Hack中调用display会调用Boom的方法,该方法可以调用aConfidentialINfo()