JAVA多态中的隐藏和覆盖
Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型
- 编译时类型:由声明该变量时使用的类型决定
- 运行时类型:由该变量指向的对象类型决定
如果编译时类型和运行时类型不一致,会出现所谓的多态。因为子类其实是一种特殊的父类,因此java允许把一个子类对象直接赋值给一个父类引用变量,无须任何类型转换,或者被称为向上转型,由系统自动完成。
如 :
Father f = new Son();
Son是Father的子类,引用变量f就会出现编译时类型和运行时类型不一致的情况,编译时是Father
类型的,运行时是Son
类型。当变量的编译时类型和运行时类型不一致时,通过变量访问它所引用的对象的实例时,该实例变量的值由声明该变量的类型
决定。通过变量访问它所引用的对象的方法时,该方法的行为由所引用的对象实际类型
所决定。
使用f时:
- 获取
static成员变量
、成员变量
、static方法
使用的是Father中的类型 - 获取
方法
使用的是Son中的类型
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步