非常抱歉,这句话没什么意义,而且容易误解。已经有好几个读者指出这一点,我已经在网站上的勘误表中改正了。下面针对这个问题加以说明。
(1)一个Java类静态方法当然可以由子类继承。比如
class Base
{
public static void someMethod()
{
System.out.println("in static method");
}
}
class Derived extends Base
{}
class Client
{
public static void main(String[] args)
{
Derived.someMethod();
Derived d = new Derived();
d.someMethod();
}
}
运行Client会打印出两行“in static method”,这说明静态方法确实被子类所继承。
(2)书中原文想要说的是:“静态方法不能被子类override,因此不支持多态性。”一个Java方法不能被子类override,也不支持多态性,并不奇怪。构造方法就是如此。TIJ说构造方法是隐含的静态方法,我同意这个说法。
举一个例子:
class Base
{
public static void someMethod()
{
System.out.println("in static method of Base");
}
}
class Derived extends Base
{
public static void someMethod()
{
System.out.println("in static method of Derived");
}
}
class Client
{
public static void main(String[] args)
{
Derived.someMethod();
Derived d = new Derived();
d.someMethod();
Base o = new Derived();
o.someMethod();
}
}
执行时会打印出
in static method of Derived
in static method of Derived
in static method of Base
(1)一个Java类静态方法当然可以由子类继承。比如
class Base
{
public static void someMethod()
{
System.out.println("in static method");
}
}
class Derived extends Base
{}
class Client
{
public static void main(String[] args)
{
Derived.someMethod();
Derived d = new Derived();
d.someMethod();
}
}
运行Client会打印出两行“in static method”,这说明静态方法确实被子类所继承。
(2)书中原文想要说的是:“静态方法不能被子类override,因此不支持多态性。”一个Java方法不能被子类override,也不支持多态性,并不奇怪。构造方法就是如此。TIJ说构造方法是隐含的静态方法,我同意这个说法。
举一个例子:
class Base
{
public static void someMethod()
{
System.out.println("in static method of Base");
}
}
class Derived extends Base
{
public static void someMethod()
{
System.out.println("in static method of Derived");
}
}
class Client
{
public static void main(String[] args)
{
Derived.someMethod();
Derived d = new Derived();
d.someMethod();
Base o = new Derived();
o.someMethod();
}
}
执行时会打印出
in static method of Derived
in static method of Derived
in static method of Base
显然,到底执行哪一个静态方法,是由变量的明显类型决定的,而不是由对象的真实类型决定。这不是多态性的。
转自:http://blog.csdn.net/yethyeth/article/details/1570974