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

关于方法调用的问题
class   Test0
{
public   void   print0()
{
System.out.print( "Hello   ");
}
}
class   Test1
{
public   void   print1()
{
System.out.print( "world! ");
}
}
class   Test2   extends   Test0
{
public   void   print2()
{
print0();
              /*这里为什么可以直接调用,
                                    而不用创建Test0的对象,
如Test0   a=new   Test0;a.print0();*/
}
}
public   class   Test   extends   Test1
{
public   static   void   main(String[]   args)
{
print1();
              /*这里调用为什么会报错??
必须Test1   a=new   Test();a.print1();*/
}
}


------解决方案--------------------
print2()可以调用print0()是因为print0()是Test2所继承的Test0的方法
虽然同样是继承,但main()方法中不能调用print1()方法是因为main()是static的,print1()是非static的。static的方法属于类的方法,而非static的方法属于对象的方法,在产生对象之前是不能调用的。
------解决方案--------------------
问题1 ,Test2 extends Test0
得到的Test2为
Public Test2(){
public void print0(){...}
public void print2(){...}
}

这里内部调用当然没有问题,但是请注意,这里Test2并没有实例化。
在Test2中加入main方法
public static void main(String[] args)
{

Test2 a=new Test2();a.print2();
}

Test2继承自Test0,所以Test2中可以访问Test0的public/protected方法和字段,不能访问private方法和字段。另一方面,如果方法不是static的,就要先实例化后才能访问。

main是static的方法,所以只能直接访问加有本类static的方法,对于非static的也一定要实例化后才能访问。