java对象中的表面类型与实际类型

表面类型:对象声明时的类型;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

可是,经过子类构建与父类彻底相同的静态函数,这中行为叫作“隐藏”,其目的就是抛弃父类的静态方法,重显子类方法。方法

相关文章
相关标签/搜索