多态分析
来源:互联网 发布:培训ppt课件优化怎么做 编辑:程序博客网 时间:2024/06/01 07:27
什么是多态
- 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。
- 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
- 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
- 多态的作用:消除类型之间的耦合关系。
- 现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。
下面是多态存在的三个必要条件,要求大家做梦时都能背出来!
多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。
多态与类型转化原理分析:
一、多态性:超类(即基类或父类)引用在运行时既能代表超类本身的对象,也能代表其子类(即派生类)的对象的能力。
类的一个成员若想表现多态必须可以被覆盖:
对于成员变量而言,不会发生覆盖现象(会隐藏),在子类出现相同变量的定义时只会隐藏父类变量,因此不会表现多态。同时变量调用在编译时就会解析,不符合动态绑定的特征;
在成员方法中,静态方法和final方法(或private方法,理由:很多人说因为private方法默认是final的,也不会发生覆盖现象(会隐藏),因此也不会表现多态性。
因此只有除静态方法和final方法以外的方法才会表现多态性。
二、向上类型转化:
丢失添加的方法和字段,剩余的为:
基类字段
基类静态方法或final方法 //前二者为不能被覆盖的成员,因此保留,无多态性
基类其他方法(若被子类覆盖则为子类覆盖的新方法)
class oopsuper { static String str = "父类字段"; public void publicMethod(){System.out.println("父类public方法");} protected void protectedMethod(){System.out.println("父类protected方法");}//(1) private void privateMethod(){System.out.println("父类private方法");} static void staticMethod(){System.out.println("父类静态方法"); } } public class oopsub extends oopsuper { String str = "子类字段"; public void publicMethod(){System.out.println("子类public方法");} protected void protectedMethod(){System.out.println("子类protected方法");}//(2) private void privateMethod(){System.out.println("子类private方法");} static void staticMethod(){System.out.println("子类静态方法"); } public static void main(String[] args) { oopsuper upcast = new oopsub(); System.out.println(upcast.str);//方法调用才具有多态性,而域没有多态性 // 能被覆盖的方法的行为才有多态特性 upcast.publicMethod(); upcast.protectedMethod(); // 不能被覆盖的方法[final方法(含私有方法)、静态方法]的行为不具有多态特性 // upcast.privateMethod();访问的是父类的私有方法,不能访问,不具有多态现象 upcast.staticMethod(); } }
0 0
- Java多态分析
- C#多态分析
- C++ 多态分析
- 多态原理分析
- 多态分析
- C++多态分析
- java多态分析
- C++|多态分析
- C++多态汇编分析
- C++多态汇编分析
- C++多态汇编分析
- C++多态问题分析
- java多态机制分析
- Java多态案例分析
- java多态示例程序与分析
- JAVA多态与类型转化分析
- 继承与多态之自学分析
- java中的多态及其内存分析
- Mysql命令教程大全
- quartz实现任务调度
- 非常详细的 Docker 学习笔记
- zabbix 安装
- 使用Sublime和R-Box编写并运行R代码
- 多态分析
- 今年来,知识分享与内容付费趋势已经暗潮汹涌
- Tomcat 8熵池阻塞变慢详解
- IIS后台job运行问题记录- 基于ASP.NET Boilerplate Background Jobs and Workers
- Oracle_sql_(5)
- wex5 实战 单页模式下的多页面数据同步
- 【转载】IO重定向与文件描述符
- 搭建本地CDH 安装中心
- 摘要android触摸事件的分发机制初识