接上一节……
若在父类中添加静态方法say,则子类不能重写父类的静态方法:
在父类和子类中都添加say方法:
父类Animal:
public static void say(){
System.out.println("动物间打招呼");
}
子类Cat:
public static void say(){
System.out.println("小猫碰胡须");
}
测试Test:
/**
* 父类引用指向子类实例
* 称为向上转型、隐式转型、自动转型
* 可以调用子类重写父类的方法以及父类派生的方法,无法调用子类独有方法
* 小类转型为大类
*/
Animal two = new Cat();
two.say();
输出:
动物间打招呼
可看到,结果正是上方注释中所说的。
若想调用子类的say方法,则需要向下转型再转回去:
/**
* 父类引用指向子类实例
* 称为向上转型、隐式转型、自动转型
* 可以调用子类重写父类的方法以及父类派生的方法,无法调用子类独有方法
* 注意:父类中的静态方法无法被子类重写,所以向上转型后,只能调用到父类原有的静态方法
* 小类转型为大类
*/
Animal two = new Cat();
two.say();
Cat cat = (Cat)two;
cat.say();
输出:
动物间打招呼
小猫碰胡须