表面类型:对象声明时的类型;java
实际类型:对象产生时的类型;ide
Base[表面类型]base=new Sub[实际类型]();函数
那么在继承关系中,方法时如何执行的呢?例子以下:code
public class StaticTest { public static void main(String[] args) { // TODO Auto-generated method stub Base base=new Sub(); base.doSomeThing1(); base.doSomeThing(); } } class Base{ public static void doSomeThing() { System.out.println("Base method---doSomeThing"); } public void doSomeThing1() { System.out.println("Base method---doSomeThing1"); } } class Sub extends Base{ public static void doSomeThing() { System.out.print("Sub method---doSomeThing"); } @Override public void doSomeThing1() { System.out.print("Sub method---doSomeThing1"); } } ------------------ Sub method---doSomeThing1 Base method---doSomeThing
咱们发现静态方法居然执行的不是子类中的方法,这是因为:对象
非静态方法是按照实际类型执行的;继承
静态方法是按照表面类型来执行的;class
可是,经过子类构建与父类彻底相同的静态函数,这中行为叫作“隐藏”,其目的就是抛弃父类的静态方法,重显子类方法。方法