目录
一、什么是多态?
1.概念
同一个对象,在不同时刻表现出来的不同形态。
2.多态的前提和体现
- 有继承 / 实现关系
- 有方法重写
- 有父类引用指向子类对象(向上转型)
二、如何实现多态?
1.继承
详情见:
Java面向对象--继承_不爱健身的数学子弟不是好程序员的博客-CSDN博客
2.方法重载
重载方法必须满足以下条件:
- 方法名相同
- 方法的参数类型、个数、顺序至少有一项不相同
- 方法的返回类型可以不相同
- 方法的修饰符可以不相同
public void play() {
System.out.println("看电影");
}
public void play(int a) {
System.out.println("去逛街");
}
public void play(int... a) {
System.out.println("去唱歌");
}
以上代码就是方法的重载。
3.多态中的转型
public class Animal {
public void eat(){
System.out.println("动物吃东西!");
}
}
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼!");
}
public void play(){
System.out.println("猫玩游戏!");
}
}
①向上转型:从子到父,父类引用指向子类对象。
②向下转型:从父到子,父类引用转为子类对象。
4.多态的代码演示
public class Animal {
public void eat(){
System.out.println("动物吃东西!");
}
}
public class Cat extends Animal { //继承
@Override
public void eat() { //方法重写
System.out.println("猫吃鱼!");
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Cat(); //父类引用指向子类对象(向上转型)
a.eat();
}
}
定义了一个动物类和猫类,并且猫类继承了动物类,并重写了eat方法。
在Test测试类中Animal a = new Cat();就是向上转型。左边是父类的引用,右边是子类的对象,既父类引用指向子类对象。
三、多态的好处和弊端
1.好处
提高了程序的扩展性
具体体现:定义方法的时候,使用父类类型作为参数,将来在使用的时候,使用具体的子类型参与操作。
2.弊端
不能使用子类的特有功能。(除向下转型)