什么是多态
多态是面向对象编程中的一个核心概念,允许基类的指针或引用指向派生类的对象,并调用相应的方法。
实现多态的条件
- 继承:必须存在继承;
- 重写:子类必须对父类中的方法进行重写;
- 向上转型:通过父类的引用调用子类的重写的方法;
方法重写是(Override):
子类可以重写父类的方法,要求方法名、参数列表和返回类型完全相同。重写方法不能降低访问权限。
•upcasting向上转型:将子类对象直接赋值给父类引用 •向上转型不需要强制类型转换 •向上转型后父类不能调用自己子类的方法 •父类引用或调用的是子类的方法 语法 Animal cat = new Cat("多多",1);
优点:让代码实现更灵活简单;
缺点:不能调用子类特有的方法;
downcasting向下转型:将指向子类对象的父类引用赋值给子类引用 需要强制类型转换 •如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。
什么是方法重载
Java中方法的重载,就是在一个类中,有相同的方法名称,但形参不同的方法。方法名一定要相同 且 参数列表一定要不同。
方法重写和方法重载的区别
重载是在同一个类中实现,重写是子类对父类实现。
多态的优缺点
优点
能够降低代码的 "圈复杂度", 避免使用大量的 if - else;
可扩展能力更强如果要新增一种新的形状, 使用多态的方式代码改动成本也比较低;
缺点
属性没有多态性,当父类和子类都有同名属性的时候,通过父类引用,只能引用父类自己的成员属性;
构造方法没有多态性;