-
多态:
-
多态允许父类引用指向子类对象,并在运行时决定调用哪个类的方法。它使代码更具灵活性和可扩展性。
-
示例:一个
Animal
类有makeSound()
方法,Dog
和Cat
继承自Animal
,并各自重写makeSound()
。通过Animal
引用调用时,根据实际对象的类型决定调用的是Dog
的makeSound()
还是Cat
的makeSound()
。 -
重载:
-
重载指同一类中多个方法有相同的名称,但参数列表不同(参数类型或数量)。它是编译时多态,通过方法签名的差异,编译器可以选择在何时调用哪个方法。
-
示例:
print(int a)
和print(String a)
是重载方法,根据传入参数类型不同调用相应的方法。 -
重写:
-
重写是子类对继承自父类的方法进行修改,使其表现出不同的行为。它是运行时多态的一部分。重写的前提是方法名称、参数列表和返回类型必须一致,且不能降低方法的访问权限。
示例:子类
Dog
重写父类Animal
的makeSound()
方法,使Dog
对象发出 “bark” 而不是父类的 “generic sound”。
强调关键点和要点
- 多态性的重要性:强调多态性在设计可扩展代码中的重要性,比如你可以通过接口或父类定义多个不同的子类,而不需要在调用时改变现有代码。
- 重载和重写的区别:说明重载是编译时决定的,而重写是运行时决定的。重载注重方法签名的不同,重写则是对继承来的方法进行修改。
- 如何使用
@Override
注解:在重写方法时应使用@Override
注解,以帮助编译器检查是否真正进行了重写,避免由于参数列表或方法签名错误而导致错误。
实际应用场景
通过实际应用场景展示你对这些概念的理解:
- 多态:在编写面向接口编程时,例如
List
接口有多个实现类(ArrayList
,LinkedList
等),可以通过多态使代码更加灵活。 - 重载:可以用来为相同功能的方法提供不同的调用方式,例如处理不同类型的输入(
int
,double
,String
等)。 - 重写:用于实现不同子类的特定行为,例如 UI 框架中不同控件对
draw()
方法的不同实现。