java中的方法重写和隐藏都是实现一种子类对父类的方法的覆盖,其中区别在于隐藏针对类方法而重写针对对象方法。
那么首先要理解的就是类方法与对象方法的区别:
这里有两个类:Hero ; ADHero
ADHero是Hero的子类
这里有两个实例:Hero h ; ADHero ah
在这里 Hero , ADHero
是抽象的,是类,而以此而建立的实实在在的 h , ah
称之为实例对象。而类方法就是属于类的方法,在创建实例前就已经存在。那如何构造一个脱离实例个体的类方法,这里需要关键字static
,被static
修饰的方法和变量会变成类方法,类变量,不需要new()
一个对象实例来调用,可以直接通过类名本身调用,如Hero.battleWin()
重写和隐藏:
class Hero:
package charactor;
public class Hero{
public String name;
protected float hp;
public void attack(){
System.out.println("hero attack");
public static void battleWin(){
System.out.println("hero battle win");
}
public static void main(String[] args){
Hero h = new ADHero();
h.battleWin();
h = null;
h.battleWin();
}
class ADHero:
package charactor
public class ADHero extends Hero{
public void attack(){
System.out.println("ADhero attack");
}
public static void battleWin(){
System.out.println("ADhero battle win");
}
}
可以看出h
指向了一个ADHero类型
的对象,而h
是一个Hero类型
的引用,而类方法只看当前调用该方法的是哪一个类,那么不管引用h
指向的对象是什么类型,h引用本身作为Hero类
,调用的都会是Hero类
的balleWin()
所以在使用类方法时,有时为避免引用的混淆,直接使用类名调用,如:Hero.battleWin()
上述代码参考自how2j网站