对于类ClassOne
来说,它是从ClassTwo
扩展而来的,classone
是子类,而ClassTwo
是超类。如果我去另一个班级并输入:ClassTwo hello = new ClassOne();
这是否意味着我只能使用ClassOne
中继承自ClassTwo
的方法,而不能使用最初在ClassOne
中继承的方法? (例如,称为void eat();
的方法位于ClassTwo
中,并且ClassOne
继承了它,但是方法void walk();
仅位于ClassOne
中,而不位于ClassTwo
中,因此,通过使用hello
关键字,我可以访问吃功能而不是步行功能?),我不太了解多态的概念。有人可以通过举一个例子很简单地解释它吗?非常感谢你。
最佳答案
是的,是的,关于可用方法,系统会将classOne
视为classTwo
。
我喜欢将这些概念视为存储桶,在这种情况下,classOne
可以放入classTwo
存储桶中。如果将classOne
放入classTwo
存储桶,则只能看到classTwo
存储桶。但是我可以从classOne
存储桶中选择classTwo
,也就是可以投射它。
在向上转换和向下转换的情况下,这也有助于将对象强制转换为超类型或子类型。您可以将项目放在篮子中(向上投射),也可以从篮子中取出(向下投射)。
这个比喻可能是胡扯,但对我有帮助:)
要回答您的问题,是的,如果将其转换为classOne
,则不能对classTwo
中的方法进行方法调用。
这是许多方便的首选。想想interfaces
,基本上是一个接口告诉您的对象提供一组方法。这样,我们可以确保调用该对象的每个人(与该对象具有周围环境的契约)都可以使用这些方法。
也可能重复:Try to describe polymorphism as easy as you can