面向对象三要素:封装、继承、多态
①. 封装:封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,或者叫接口。
②. 继承:
- 继承基类的方法,并做出自己的扩展;
- 声明某个子类兼容于某基类(或者说,接口上完全兼容于基类),外部调用者可无需关注其差别(内部机制会自动把请求派发dispatch到合适的逻辑)。
③. 多态:基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。很显然,多态实际上是依附于继承的第二种含义的。
一. 多态
方法签名:方法名 + 参数列表(参数类型、个数、顺序)
1.1 重写
子类重写父类方法,只有实例方法可以被重写,重写后的方法必须仍为实例方法。成员变量和静态方法都不能被重写,只能被隐藏。
重写实例方法:超类Parent中有实例方法A,子类child定义了与A 相同签名和子集返回类型 的实例方法B,子类对象ChildObj只能调用自己的实例方法B。
方法的重写(override)两同两小一大原则:
- 方法名相同,参数类型相同
- 子类返回类型小于等于父类方法返回类型
- 子类抛出异常小于等于父类方法抛出异常
- 子类访问权限大于等于父类方法访问权限
注意:
- 不能重写static静态方法。(形式上可以写,但本质上不是重写,属于下面要讲的隐藏)
- 重写方法可以改变它的方法修饰符,如final,synchronized,native。不管被重写方法中有无final修饰的参数,重写方法都可以增加、保留、去掉这个参数的 final 修饰符(参数修饰符不属于方法签名)。
1.2 重载
在同一个类中,有多个方法名相同,参数列表不同(参数个数不同,参数类型不同),与方法的返回值无关,与权限修饰符无关。编译器通过对方法签名的识别即可静态编译出不同的方法。这也是java中重载与重写的区别之一。
重载只是一种语言特性,与多态无关,与面向对象也无关。多态是为了实现接口重用。
Java中方法是可以和类名同名的,和构造方法唯一的区别就是,构造方法没有返回值。
1.3 隐藏
隐藏与覆盖在形式上极其类似(语法规则),但有着本质的区别:只有成员变量(不管是不是静态)和静态方法可以被隐藏。
1.4 成员变量
超类 Parent 中有成员变量 A ,子类 Child 定义了与 A 同名的成员变量 B ,子类对象 ChildObj 调用的是自己的成员变量 B。如果把子类对象 ChildObj 转换为超类对象 ParentObj ,ParentObj 调用的是超类的成员变量 A !
- 隐藏成员变量时,只要同名即可,可以更改变量类型(无论基本类型还是隐藏类型)
- 不能隐藏超类中的 private 成员变量,换句话说,只能隐藏可以访问的成员变量。
- 隐藏超类成员变量 A 时,可以降低或提高子类成员变量B的访问权限,只要A不是 private。
- 隐藏成员变量与是否静态无关!静态变量可以隐藏实例变量,实例变量也可以隐藏静态变量。
- 可以隐藏超类中的final成员变量。
1.5 静态方法
超类 Parent 有静态方法 A ,子类 Child 定义了与 A 相同签名和子集返回类型 的静态方法 B ,子类对象 ChildObj 调用的是自己的静态方法 B 。如果把子类对象 ChildObj 转换为超类对象 ParentObj ,ParentObj 调用的是超类的静态方法 A !
隐藏后的方法必须仍为静态方法
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- Java 与 Office 结合是否适合报表生成?(java office 适合报表生成吗 )
- 如何有效提升 java corn 表达式的性能?(如何优化java corn表达式的性能 )
- PHP数据类型转换常见误区解析
- 如何在 Java 中高效地创建列表?(如何在Java中创建列表)
- Java中dubbo的最佳实践案例有哪些?(java中dubbo有哪些最佳实践案例)
- 如何通过 Java 代码获取当前时间戳?(如何使用Java获取当前时间戳)
- 如何使用 Java 编写一个 circular 类?(怎么用java编写一个circular类)
- 在 Java 中如何安全地进行 SQL 拼接?(Java中怎么安全的进行SQL拼接)
- Java 的 enum 有哪些需要注意的事项?(java的enum的注意事项)
- 深入解析:如何有效提升PHP数据类型的转换效率