静态方法的调用问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 01:59:18
class MyThread extends Thread
{
public void run()
{
System.out.println(getName());
}
}

getName()不是一个static 方法,为什么可以直接用喃

非静态方法不是应该实例化一个对象再调用么?
public class AA
{
public void Pr()
{
System.out.println("Hello !");
}
}
class BB extends AA
{
public static void main(String[] args)
{
AA a = new AA();
//Pr(); 为什么错误喃!BB不是继承了AA了么?

}
}

因为你的run方法不是静态,意味着你在调用run方法时已经有了一个Mythread实例,当然就可以直接使用getName方法了。

不能在静态方法内调用非静态方法是因为,静态方法不属于一个实例,所以你在静态方法内调用非静态方法编译器不知道你调用的是哪一个实例的非静态方法。

等于
this.getName()

对于你的补充问题
在一个类的static方法中只能直接调用改类或者父类的static方法 因为Pr()不是static方法所以不能调用
如果改成a.Pr()就可以了

是继承了父类的方法了呗
没有继承关系的静态方法可以直接用类名.方法名来调用