一个小程序,难道无数人,来看看!
public class Foo
{
static void putout()
{
System.out.println( "OK ");
}
}
public class Fooing extends Foo
{
static void putout()
{
System.out.println( "Good ");
}
public static void main(String[] args)
{
Foo f=new Fooing();
f.putout();
}
}
请问结果是什么?解释一下!
------解决方案--------------------有个毛结果
编辑都不会通个两个public 类
------解决方案--------------------应该是输出OK,不过你别用这么吓人的标题了,听不到好话的.
------解决方案--------------------是ok
------解决方案--------------------删
------解决方案--------------------大哥!不要老是用这样的名字。我给你详细讲一讲吧。
输出“ok”,原因是这样的:
因为Foo 和Fooing中的putout()是static的,静态(类)方法不属于某个实例,所以所谓的f.putout()中其实f的类型就是foo。因为你定义的是Foo f ,f.putout()这与后面的new什么没关系,因为它是个类方法,本质上它等同于Foo.putout() 。
可能上面说的不明白,再考虑一个例子,如果你的例子中,putout()没有修饰符static,那么这个例子答案是“Good”,因为这时候putout()是与实例相关的,而你在定义实例的时候Foo f=new Fooing(); f的引用的对象实际是Fooing的实例,这时候你去调用putout()就会调用Fooing中的putout(),也就是“Good” 。
一句话,调用类方法的时候就别考虑new的是什么,因为实际静态方法实际推荐使用类名引用的。如:Foo.putout() ,Fooing.putout() ,但是普通的方法一定要关注的是new 后面的类究竟是什么,主要不是用 super.putout(),那么就是指子类中的方法。
------解决方案--------------------这也难倒无数人??