前言:
对于多态的一些概念存在模糊,于是这次来挑一下特别容易误解的点。
正文:
在Java中,向上转型(upcasting)是将子类的对象引用赋给父类的引用。例如,如果User2
继承自Object
,那么你可以这样做:
User2 user2 = new User2();
Object obj = user2; // 这就是向上转型
在这个例子中,obj
是Object
类型的引用,但它实际上引用的是一个User2
对象。
现在,如果你通过obj
引用来访问成员方法或成员属性,你只能访问那些在Object
类中定义的方法和属性。也就是说,你只能访问obj
引用类型(即Object
)所允许的方法和属性,而不能访问User2
类中特有的方法和属性。这是因为在编译时,编译器只知道obj
是Object
类型的,所以它只允许你调用Object
类中存在的方法。
然而,如果User2
类重写了Object
类的某个方法(例如toString
方法),那么当你通过obj
引用调用这个方法时,会调用User2
类中的版本,而不是Object
类中的版本。这是因为Java支持动态绑定(dynamic binding),也称为后期绑定(late binding)或运行时多态(runtime polymorphism)。在运行时,JVM会根据obj
引用的实际对象类型来决定调用哪个版本的方法。
总结:
成员属性看的是父类
向上转型之后,你只能调用父类中定义的方法和属性,但如果子类重写了父类的方法,那么会调用子类的版本。
也就是说有看的是能够重写的方法,子类有重写的方法看子类,没有重写的方法看父类。
但是不会看子类特有的方法!
本文来自博客园,作者:news_one,转载请注明原文链接:https://www.cnblogs.com/new-one/p/17832294.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/199426.html