先观察第一批父类和子类代码
父类代码:
public class Hero{
public static void battleWin(){
System.out.println("显示父类");
}
}
子类代码:
public class ADHero extends Hero{
public static void battleWin(){
System.out.println("显示子类");
}
public static void main(String[] args){
Hero h = new ADHero();//用父类new一个子类
h.battleWin();
}
}
结果显示为
显示父类
—————————————————————————————分割线————————————————————————
但是我们把battleWin()方法前面的static
静态声明去掉,即变成以下代码:
父类代码:
public class Hero{
public void battleWin(){
System.out.println("显示父类");
}
}
子类代码:
public class ADHero extends Hero{
public void battleWin(){
System.out.println("显示子类");
}
public static void main(String[] args){
Hero h = new ADHero();//用父类new一个子类
h.battleWin();
}
}
结果就会显示为
显示子类
这是为什么呢?因为
如果父类和子类创建的是静态方法,结果会调用引用所在的父类方法;
如果父类和子类创建的是非静态方法,结果会调用引用所指向的子类方法;