黄阶低级 - 《 Java 核心》- 5.1 类、超类和子类(三) - 修改 1 次
来源:互联网 发布:vb点击按钮弹出输入框 编辑:程序博客网 时间:2024/04/30 17:52
1、继承层次
在继承层析中,从某个特定类到其祖先的路径成为该类的继承链
由于 Java 的单继承机制,我猜想一个类的继承链是唯一的,但这一点我还没有找到明确地答案,有大神可以告诉我。
2、多态
有一个用来判断是否应该设计为继承关系的简单原则,就是 is-a 原则
例如,每个经理都是雇员,将 Manager 类设计为 Employee 类的子类的显而易见的 。
Java实现多态有三个必要条件:
- 继承、重写、向上转型。
- 继承:在多态中必须存在有继承关系的子类和父类。
- 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
3、动态绑定
了解调用对象方法的执行过程十分重要,下面是执行过程:
第一步:假设调用 x.f(param) ,且隐式参数 x 声明为 C 类的对象。编译器将会一一列举所有 C 类中名为 f 的方法和其超类中名为 f 的且访问属性为 public 的方法。
第二步:编译器将进行参数类型匹配,这个过程就要重载解析,若有完全匹配的就选这个方法,没有的话匹配允许类型转换的方法,比如 int 可以转换成 double ,如果这样还是不能找到匹配项,编译器就会报错;同时如果找到多于一个匹配项,编译器也会报错。
静态绑定和动态绑定的区别:
如果是 private,static,final 方法或者构造器,那么编译器可以明确地知道该调用哪个方法,这种调用方式成为静态绑定;与此对应的是,调用依赖于隐式参数的实际类型,并且在运行中实现动态绑定。
深入:每次调用方法都要进行搜索,时间开销相当大,因此,虚拟机预先为每个类创建了一个方法表,里面列出了所有方法的签名和实际调用的方法。
注意:在覆盖一个方法时,子类方法不能低于父类方法的可见性。
4、阻止继承: final 类和方法
不允许扩展的类称为 final 类, final 类中的所有方法自动地成为 final 方法,但不包括域,域不会自动成为 final
深入:如果一个方法没有被覆盖并且很短,编译器就能够进行内联。
5、抽象类
为什么要花力气进行高层次的抽象呢?可以使用共性,提取交集,减少重复,明确 is-a 关系等,不然要为每一个对象建立一套完整的体系。
注意:抽象类和 final 类不同,其中的方法不会自动定义为抽象方法,与之相反,有抽象方法的类一定要声明为抽象类。
个人记忆:抽象类,Person类,抽象方法,具体数据和具体方法,父类可以比子类更抽象,提出一个概念让子类去实现。
没有完全把父类的抽象方法实现的子类还是抽象类;当然如果为了不把当前类作为实例类,也大可声明为抽象类,这样别人就不能实例化该类了。
6、受保护访问
为了给子类使用父类的属性和方法而不给其他包的类用,可以使用 protected
这种方法一个最好的实例就是 Object 类的 clone 方法,后续再介绍。
- 黄阶低级 - 《 Java 核心》- 5.1 类、超类和子类(三) - 修改 1 次
- 黄阶低级 - 《 Java 核心》- 5.1 类、超类和子类(二) - 修改0次
- 黄阶低级 - 《 Java 核心》- 5.1 类、超类和子类 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.0 对象和类 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.1 对象和类 - 修改0次
- 黄阶低级 - 《 Java 核心》- 5.2 Object 类,所有的类的超类 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.3 数据类型 - 修改1次
- 黄阶低级 - 《 Java 核心》- 5.0 继承- 修改 1 次
- 黄阶低级 - 《 Java 核心》- 4.2 使用预定义类 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.3 用户自定义类 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.8 类路径 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.2 注释 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.4 变量 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.6 字符串 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.7 输入输出 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.10 数组 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.7 包 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.4 静态域和静态方法 - 修改0次
- M102: MongoDB for DBAs - Chapter 1: Introduction
- 开发中ARC forbids explicit message send of 'dealloc'和 'autorelease' is unavailable: not available 解决
- EasyPusher手机直播推送是如何实现后台直播推送的
- 如何升级Mininet的Open vSwitch版本
- 51Nod-1109-01组成的N的倍数
- 黄阶低级 - 《 Java 核心》- 5.1 类、超类和子类(三) - 修改 1 次
- JAVA集合类图
- mysql绿色版使用和mysql常用服务命令
- MPAndroidChart- 高级修改一
- android:scaleType 的几种选择
- URL编码问题
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- U3D常用英文释义
- inet_ntoa、 inet_aton、inet_addr