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

请大家进来看一下,书上所说的这个标题,是不是错误的?
class   A
{
static   void   qq()
{
System.out.println( "第一个qq ");
}
public   static   void   main(String   args[])
{
B   b=new   B();
b.qq();
}
}
class   B   extends   A
{
static   void   qq()
{
super.qq();//各位,书上说子类不能覆盖超类中的static方法,是不是说错了啊/我这个程序中覆盖了超类中的qq方法了只啊
//但是,想问一下,在这个地方如何再调用超类的中qq静态方法?
System.out.println( "第二个qq ");
}
}

------解决方案--------------------
你这不叫覆盖,Java会认为子类里又写了一个和父类重名的静态函数而已,和父类那个是独立的,父子各有一个,你想用哪个都可以。
------解决方案--------------------
//但是,想问一下,在这个地方如何再调用超类的中qq静态方法?
把super.qq()改成A.qq()就可以了.
class A
{
static void qq()
{
System.out.println( "第一个qq ");
}
public static void main(String args[])
{
B.qq();//这里不new也行,因为是静态方法.
A.qq();
}
}
class B extends A
{
static void qq()
{
A.qq();
System.out.println( "第二个qq ");
}
}
------解决方案--------------------
发表一下:
父类static方法,只能在子类用static方法覆盖。
父类非static方法,只能在子类用非static方法覆盖。
static方法是属于类的,可以通过“类名.static成员名”来调用。
非static方法是属于对象的,是通过对象来调用。
------解决方案--------------------
书没错