多态
什么是多态
定义:多态是指同一行为,具有多个不同的表现形式
例如:同样是吃东西,对猫来说就是吃鱼,对狗来说就是吃骨头。应该比较好理解了吧。
多态的好处
使用父类类型的作为方法形式参数,传递子类对象给方法,进行方法的调用,可以很好的体现多态的扩展性和便利性。可以使代码更加简介。
多态的表现形式
方法的重写和重载
(方法的重载:
1、在同一个类中
2、有两个或两个以上重名的方法
3、但是方法的参数个数、类型、顺序至少有一个不一样)
(方法的重写:
1、继承中,子类对象对父类方法的重新定义
2、子类中的某些方法与父类中的某些方法,方法名,参数列表完全一致,即使方法体内部没有改变,或者是空方法体也是重写)
对象的多态性(向上转型和向下转型)
引用类型转换
1、向上类型转换
多态的定义就是子类类型向父类类型转换的过程,默认进行
Animal a = new Cat();
2、向下类型转换
把父类对象转换为子类对象。
Animal a = new Animal();
Dog d = (Dog)a;
这个过程是强制进行的,但是我们在进行向下类型转换的过程中,需要先使用instanceof关键字判断是否可以向下转换为子类对象,避免对象转换异常
向下类型转换的好处:在进行方法调用的时候,如果要使用子类特有的方法则会出现错误,这个时候就需要把向上类型转换的对象强转为子类对象。
//定义一个带有eat()抽象方法的父类
public abstract class Animal {
public abstract void eat();
}
//子类Dog继承父类
public class Dog extends Animal {
//重写父类的eat方法
public void eat(){
System.out.println("狗吃骨头");
}
}
//定义Animal的Cat子类
public class Cat extends Animal{
public void eat(){
System.out.println("猫爱吃鱼");
}
}
//测试类
public class Test {
public static void main(String[] args) {
//多态形式创建对象
Animal a = new Dog();
a.eat();
Animal a1 = new Cat();
a1.eat();
}
}
我们看一下效果
我们看见在这里分别执行了子类的eat方法。
我们在看一个多态的好处
public class Test {
public static void main(String[] args) {
//多态形式创建对象
Cat c = new Cat();
Dog d = new Dog();
eatCat(c);
eatDog(d);
showeat(c);
showeat(d);
}
public static void eatCat(Cat c){
c.eat();
}
public static void eatDog(Dog d){
d.eat();
}
public static void showeat(Animal a){
a.eat();
}
}
执行效果
我们可以看见执行效果是一样的,但是我们使用第二种的时候不必为每一个子类对象提供展示的方法,而只需要把父类作为形式参数即可,这样大大增加了代码的简洁性。
所以,多态的好处,体现在,可以使程序编写的更简单,并有良好的扩展