Java中多态性指允许不同类的对象对同一消息做出响应。
即同一方法可以根据使用对象的不同而采用多种不同的行为方式。
现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在IE界面下弹出的浏览器的帮助文档;如果当前在 Word 下弹出的就是 office帮助;在 Windows 下弹出的就是 Windows 帮助和支持
多态的主要作用适用于消除类型之间的耦合关系,提高程序的可扩展性。
简单说多态是具有表现多种形态的能力的特征
前提:要有层级关系。(在继承的关系下,或者是在接口的实现关系下)
父类对象有多种形态的能力,父类对象可以是任意一个子类的实例
多态也称为子类对象向上转型,或者说父类引用指向任意子类对象。或者认为编译时数据类型与运行时数据类型不一致
引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法(编译时调用父类方法,运行时调用子类方法)因此,编写Java代码时,引用只能调用编译器类型里包含的成员(父类成员)
多态的弊端,只能访问父类成员,子类独有的成员无法访问
向下转型: 将父类实例转化成子类对象(强制转换)
简单案例解释:人类是父类,男人女人是子类,一个人是男人,一定也是人,所以向上转型不需要强制,但是一个人是人,但不一定是男人,所以需要强制转换
在某些情况下,基类无法(或者没有必要)提供被覆盖方法的具体实现,那么就可以将此方法声明成抽象方法
如果某个类中包含有抽象方法,那么该类就必须定义成抽象类
定义抽象类同样使用关键字abstract,一般语法:
简单的理解,Java的抽象就是只声明行为接口(方法签名)而不完成具体的实现。
利用抽象的概念,能够在开发项目中创建扩展性很好的架构,优化程序
抽象类,抽象方法,在软件开发过程中都是设计层面的概念。也就是说,设计人员会设计出抽象类,抽象方法,程序员都是来继承这些抽象类并覆盖抽象方法,实现具体功能
抽象类是抽象方法的容器,如果某个类中包含有抽象方法,那么该类就必须定义成抽象类。抽象类中也可以包含有非抽象的方法甚至抽象类中可以没有抽象方法
抽象类不可以直接实例化,只可以用来继承作为其他类的父类存在
抽象类的派生子类应该提供对其所有抽象方法的具体实现
原文:https://www.cnblogs.com/Leo-Heng/p/14540121.html