下面为测试代码,去掉注释部分会出现异常,哪位大虾帮忙解释一下,谢谢
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
{}

解决方案 »

  1.   

    哥 你t3.run();那个方法是 run2好不好啊
    run 2啊 2啊 2仔细一点就发现2了。
    class Test3
    {
        private void run2()
      

  2.   

    重新发一下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 run()
        {
            System.out.println("Test1");
        }
    }class Test4 extends Test3
    {}
      

  3.   

    如果你把main方法移到Test2 中后
    编译器告诉我:Test1.java:16: run() 可以在 Test1 中访问 private因为main方法在Test1中,在类的内部,所有可以调用私有成员变量和方法,
    所以在Test1 中的main方法中调用run方法可以,但是在Test2中就不行了。
      

  4.   

    因为main方法也是类里的方法,同一个类里的方法当然能够调用此类中的private方法了,只不过main函数是静态的,所以需要new一个实例来调用这个方法而已。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();
    }}上面这个类中的sayGood和main函数的声明几乎是相同的,可以看到它也是可以调用本类的private方法的。
    main函数的特别之处也就是能够被JVM直接调用而已,其他的跟普通的方法没什么区别的~所以,main方法没办法访问其它类的private方法或者是field
      

  5.   

    private权限说明的很清晰啊?为何还有此一问