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();
}
}
请问结果是什么?解释一下!
{
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”,原因是这样的:
因为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(),那么就是指子类中的方法。