在我的类层次结构中,有一个名为“ Media type ”的超类。“ Sound ”和“ Image ”是它的两个子类。对于 Sound 和 Image 类,我希望有一个方法作为quality()。但是方式方法 quality() 在声音类和图像类不同时有效。我想知道的是在超类“媒体类型”中我可以添加两个同名的方法 quality(),根据对象类型(是声音还是图像类型对象)决定应该使用哪个quality()方法。这就是所谓的多态性吗?
4 回答
我想知道的是在超类“媒体类型”中我可以添加两个具有相同名称的方法quality(),根据对象类型(是声音还是图像类型对象)决定应该使用哪个quality()方法发挥作用。
好吧,你已经部分理解了多态性。多态的美妙之处在于你不需要两种方法——你只需要一种。在父类中定义方法quality()
,然后在每个子类中实现具体的行为。如果您有一些Media
对象,您可以quality()
全部调用它们 - 在运行时,将调用正确的具体类的实现。
ArrayList<Media> m = new ArrayList<>();
m.add(new Sound());
m.add(new Image());
for(Media obj: m) {
obj.quality(); // polymorphism in action!
}
试试看。祝你好运!
您添加一个名为 class 的方法quality()
,MediaType
然后在Sound
和Image
classes 中覆盖它。这样,无论何时quality()
调用 any ,都会调用每个对象(或)MediaType
的正确quality()
方法。是的,这就是多态性。Sound
Image
This is an example of Polymorphism:
You have a general (parent) class where method()
exists and you add subclasses (inherit) where the same method()
exists, but might be overriden.
For all of the classes above you can call method()
and the corresponding method()
would be called.
我是一个初级程序员,但我可能可以帮助你一点。据我了解,多态性是一个类表现得好像它有两种不同类型的能力。编译时(当前类型)类型和运行时(真实类型)类型。如果你有一个声音类型实例并将它分配给一个媒体类型实例,它的运行时类型将是声音,但它的编译时类型将是媒体。这意味着要调用一个方法,该方法需要存在于您的编译时类型类(媒体)中,但实际调用的方法将是您的运行时类(声音)中包含的具有相同功能的方法。