下面为测试代码,去掉注释部分会出现异常,哪位大虾帮忙解释一下,谢谢
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
{}
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
{}
run 2啊 2啊 2仔细一点就发现2了。
class Test3
{
private void run2()
{
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
{}
编译器告诉我:Test1.java:16: run() 可以在 Test1 中访问 private因为main方法在Test1中,在类的内部,所有可以调用私有成员变量和方法,
所以在Test1 中的main方法中调用run方法可以,但是在Test2中就不行了。
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