java 中 多态性 向上转型 和 向下转型 是什么 如何理解?或如何更好地理解
多态性的使用基于子类对父类方法的重建使用父类函数生成子类对象仅可以使用之类中重建的父类方法而子类独有的方法是父类对象无法使用的即上转型的类可以可以使用的仅有它自身说有的方...
多态性的使用基于子类对父类方法的重建 使用父类函数生成子类对象仅可以使用之类中重建的父类方法 而子类独有的方法是父类对象无法使用的 即上转型的 类 可以 可以使用的 仅有它自身说有的方法 它所对应的子类如果有 重建的方法 则使用子类重建的方法
父类 可已通过使用子类重构的方法 变相的实现 对子类 变量的调用
希望有人可以 整理扩充一下 使更多人可以理解 多谢 展开
父类 可已通过使用子类重构的方法 变相的实现 对子类 变量的调用
希望有人可以 整理扩充一下 使更多人可以理解 多谢 展开
1个回答
展开全部
比如所有类的跟类都是Object。
假设你现在建立了一个类叫Person。
然后你创建了一个Person类的对象,现在你想调用一个方法,想把这个Person对象作为参数传给它。
但是这个方法里要的是一个Object类型的参数,并不是要Person类的参数。
而所有的类都继承自Object,也就是说Object类有的方法、属性,其它类都有(构造方法除外)。
所以这个时候你就可以把Person对象转成Object类的对象传给它,因为Object对象有的方法属性它都有(构造方法除外)。
这就是向上转型。
再举个例子。
假设以后别人给你提供了一个容器,可以帮你把这些对象都存起来,不需要你自己去管理。
在存的时候,你需要给这个对象设置一个名字,以后靠名字去取对象。
但问题是我们要存储的对象可能有上百种,它不可能为每一个对象都专门提供一个容器去存,更何况这里面还有很多我们自定义的类?
这个时候问题就来了,在我们从容器里获取对象的时候,它究竟应该给我们返回什么类型呢?
这个时候的解决办法就是返回给我们一个统一的类,Object类,所有的类都继承自它,所有的类都具有它的属性方法(构造方法除外)。把它们都转成Object类,它们就都一样了。
此时它是Object对象,我们无法调用它自身的方法,因为它是Object对象,这些方法Object类没有定义。
因此虽然我们从容器里拿出来的都是Object类的对象,但如果想使用该类对象自身的东西还是需要将其转换为它自己本身。
总之向上转型只能转为它的父类,或者它已经实现了的接口。
向下转型也只能转为它的其它父类或它自身的类。
不能转为不相干的类。
就向男人可以转化为人、动物、生物,而不能从生物向下转到人、女人。
人和生物都算是男人的父类。
假设你现在建立了一个类叫Person。
然后你创建了一个Person类的对象,现在你想调用一个方法,想把这个Person对象作为参数传给它。
但是这个方法里要的是一个Object类型的参数,并不是要Person类的参数。
而所有的类都继承自Object,也就是说Object类有的方法、属性,其它类都有(构造方法除外)。
所以这个时候你就可以把Person对象转成Object类的对象传给它,因为Object对象有的方法属性它都有(构造方法除外)。
这就是向上转型。
再举个例子。
假设以后别人给你提供了一个容器,可以帮你把这些对象都存起来,不需要你自己去管理。
在存的时候,你需要给这个对象设置一个名字,以后靠名字去取对象。
但问题是我们要存储的对象可能有上百种,它不可能为每一个对象都专门提供一个容器去存,更何况这里面还有很多我们自定义的类?
这个时候问题就来了,在我们从容器里获取对象的时候,它究竟应该给我们返回什么类型呢?
这个时候的解决办法就是返回给我们一个统一的类,Object类,所有的类都继承自它,所有的类都具有它的属性方法(构造方法除外)。把它们都转成Object类,它们就都一样了。
此时它是Object对象,我们无法调用它自身的方法,因为它是Object对象,这些方法Object类没有定义。
因此虽然我们从容器里拿出来的都是Object类的对象,但如果想使用该类对象自身的东西还是需要将其转换为它自己本身。
总之向上转型只能转为它的父类,或者它已经实现了的接口。
向下转型也只能转为它的其它父类或它自身的类。
不能转为不相干的类。
就向男人可以转化为人、动物、生物,而不能从生物向下转到人、女人。
人和生物都算是男人的父类。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询