多态性,简单来说,就是同一个方法在不同的对象上表现出不同的行为。听起来有点抽象,我们可以把它分为两种情况来理解:方法重载和方法重写。
1. 方法重载(编译时多态性)
方法重载是指同一个类中有多个方法,它们的名字相同,但参数不同(参数的类型、数量或顺序不同)。当你调用这个方法时,Java会根据你传入的参数来决定执行哪个具体的方法。这就是编译时多态性,因为在编译时就能确定要调用哪个方法。
举个例子:
- 你有一个类叫
Calculator
,里面有两个方法都叫add
,一个是加两个整数,另一个是加两个浮点数。当你调用add(2, 3)
时,Java会执行加整数的方法;当你调用add(2.5, 3.5)
时,Java会执行加浮点数的方法。
2. 方法重写(运行时多态性)
方法重写是指子类重新定义父类中已有的方法。子类的方法和父类的方法名字、返回类型、参数都要相同。当你用父类的引用指向子类的对象,并调用这个方法时,实际执行的是子类的版本。这就是运行时多态性,因为要到运行时才能确定具体执行哪个方法。
举个例子:
- 你有一个父类叫
Animal
,里面有一个方法叫makeSound
。然后你有两个子类,一个叫Dog
,重写了makeSound
方法,输出“汪汪”;另一个叫Cat
,重写了makeSound
方法,输出“喵喵”。当你用Animal
类型的引用指向Dog
对象,并调用makeSound
方法时,实际输出的是“汪汪”;当你用Animal
类型的引用指向Cat
对象,并调用makeSound
方法时,实际输出的是“喵喵”。
总结
多态性是面向对象编程的一大特性,它使得同一个方法在不同的对象上可以表现出不同的行为,从而提高了程序的灵活性和可扩展性。通过方法重载和方法重写,我们可以在不同的场景下使用相同的方法名来实现不同的功能。