JAVA多态中的隐藏和覆盖

Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型

  • 编译时类型:由声明该变量时使用的类型决定
  • 运行时类型:由该变量指向的对象类型决定

若是编译时类型和运行时类型不一致,会出现所谓的多态。由于子类实际上是一种特殊的父类,所以java容许把一个子类对象直接赋值给一个父类引用变量,无须任何类型转换,或者被称为向上转型,由系统自动完成。java

如 :code

Father f = new Son();

Son是Father的子类,引用变量f就会出现编译时类型和运行时类型不一致的状况,编译时是Father类型的,运行时是Son类型。当变量的编译时类型和运行时类型不一致时,经过变量访问它所引用的对象的实例时,该实例变量的值由声明该变量的类型决定。经过变量访问它所引用的对象的方法时,该方法的行为由所引用的对象实际类型所决定。对象

使用f时:

  • 获取static成员变量成员变量static方法使用的是Father中的类型
  • 获取方法使用的是Son中的类型
相关文章
相关标签/搜索