日期:2014-05-20  浏览次数:20669 次

为什么main函数中创建的对象,可以调用main函数所在类的私有方法?
下面为测试代码,去掉注释部分会出现异常,哪位大虾帮忙解释一下,谢谢

Java code

public class Test1
{
    private void run()
    {
        System.out.println("Test1");
    }

    public static void main(String[] args)
    {
        Test1 t1 = new Test2();
        t1.run();//调用私有方法
        
        
        //Test3 t3 = new Test4();
        //t3.run();//调用私有方法
    }
}

class Test2 extends Test1
{

}

class Test3
{
    private void run2()
    {
        System.out.println("Test1");
    }
}

class Test4 extends Test3
{

}



------解决方案--------------------
哥 你t3.run();那个方法是 run2好不好啊
run 2啊 2啊 2。。。

仔细一点就发现2了。。。。
class Test3
{
private void run2()


------解决方案--------------------
如果你把main方法移到Test2 中后
编译器告诉我:Test1.java:16: run() 可以在 Test1 中访问 private

因为main方法在Test1中,在类的内部,所有可以调用私有成员变量和方法,
所以在Test1 中的main方法中调用run方法可以,但是在Test2中就不行了。


------解决方案--------------------
private是同一个类里可见!
------解决方案--------------------
因为main方法也是类里的方法,同一个类里的方法当然能够调用此类中的private方法了,只不过main函数是静态的,所以需要new一个实例来调用这个方法而已。
Java code

public class Test {
    
    private int a = 34;
    private void print(){
        System.out.println("Good");
    }
    public static void sayGood(){
        new Test().print();
    }
    public static void main(String[] args){
        new Test().print();
        System.out.println(new Test().a);
        Test.sayGood();
    }

}

------解决方案--------------------
private 权限是当前类。。。

------解决方案--------------------
private权限说明的很清晰啊?为何还有此一问
------解决方案--------------------
探讨
如果你把main方法移到Test2 中后
编译器告诉我:Test1.java:16: run() 可以在 Test1 中访问 private

因为main方法在Test1中,在类的内部,所有可以调用私有成员变量和方法,
所以在Test1 中的main方法中调用run方法可以,但是在Test2中就不行了。

------解决方案--------------------
探讨
private是同一个类里可见!