当前位置: 代码迷 >> J2SE >> 为什么main函数中创建的对象,可以调用main函数所在类的私有方法?解决方法
  详细解决方案

为什么main函数中创建的对象,可以调用main函数所在类的私有方法?解决方法

热度:22   发布时间:2016-04-24 02:06:15.0
为什么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是同一个类里可见!
  相关解决方案