多态的好处和弊端以及对象的向上转型和向下转型
多态的好处和弊端以及对象的向上转型和向下转型
什么是多态 多态:
多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
多态的好处
- 提高了代码的可维护性(继承保证);
- 提高了代码的扩展性(由多态保证);
- 无论右边new的时候换成哪个子类对象,等号左边调用方法都不会变化;
多态性:父类引用指向子类对象;
格式:
父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();
**多态内的成员变量特点:
- 直接通过对象名访问,等号左边(父类/接口)是谁,优先用谁,否则向上找(object)。
- 间接通过成员方法访问,方法是谁,则优先用谁。
访问成员方法:
- new的是谁,则优先用谁。口诀(编译看左边,运行看右边)
**
//父类
public class Fu {
public void teach(){
System.out.println("父亲教java");
}
}
//子类
public class Zi extends Fu{
@Override
public void teach() {
System.out.println("儿子教python");
}
public void playGame(){
System.out.println("儿子玩游戏");
}
}
//main
public class Main {
public static void main(String[] args) {
//对象向上转型
Fu fu = new Zi();//多态
fu.teach();
//fu.playGame() --错误,因为父类没有该方法,是无法指向子类的方法的
/*[把父类的引用强制转换为子类的引用。(向下转型)]
解释:当我们使用多态方式调用方法时,首先检查父类中是否有该方法,
如果有,再去调用子类的同名方法;如果没有,则会编译错误。*/
System.out.println("============分割线============");
//我就想使用子类的特有功能?行不行?--行 ===>>>> 对象向下转型
Zi zi = (Zi) fu;
zi.playGame();
zi.teach();
}
}
向下转型中有可能的异常:
-
ClassCastException:类型转换异常 ,一般在多态的向下转型中容易出现
