文章目录
- 类型转换
- 类型转换的规则
- 转型或向上转型
- 隐式转换
- 显示类型转换
- 方法的查找
- 实例方法的查找
- 类方法查找
- 多态(一)
- 多态的概念
- 多态的作用/目的
- 绑定
- 绑定的概念
- 绑定的分类
- 静态绑定
- 动态绑定
类型转换
类型转换的规则
- 基本类型之间的转换:就是将值从一种类型转变为另一种类型。
- 引用变量的类型转换:将引用转换为另一种类型的引用,并不改变对象本身的类型
只能被转换为:
1)任何一种超类的类型(向上转型)
2)对象所属的类(及其超类)实现的一个接口(向上转型)
3)被转为引用指向的对象的类型(唯一可以向下转型的情况) - 当一个引用被转为其超类引用之后,通过它能够方法问的只有超类中声明过的方法。
- 子类的对象可以赋值给父类的变量,但是父类的对象可以赋值给子类
- java中不存在对象对对象的复制
转型或向上转型
用括号围起类型放在值的前面,对象 本身并每天有发生任何变化,所以不属于类型转换。
运行时有机质来检查这样的转换是否合理。
现在拿一个子类的对象当作父类对象来用,向上造型 是默认的,不需要运算符,向上造型总是安全的。
隐式转换
现在先规定一个继承关系方便后续说明:
基本数据类型:
可以转换的类型之间,有存储容量低的自动向存储容量高的类型转换。
引用数据类型:
被转为更加一般的类
eg
Employee emp;
emp = new Manager(); //将Manager类型的对象直接赋给Employee类的引用变量,系统会自动将Manage对象塑型为Employee类
被塑型为对象所属类实现的接口类型
eg
Car jetta = new Car();
Insurable item = jetta;
显示类型转换
基本数据类型:
直接在要转化的变量前面加上要转化的类型,并将类型加上括号
eg
(int)123.4567890;//实际上就是123
(char)65;//实际上就是就是ACSII码中65对应的字符A
(long)453;//实际上就是453L
引用变量:
也是在要转化的变量前面加上要转化的类型,并将类型加上括号
Employee emp;
Manager man;
emp = new Manager();
man = (Manager)emp; //将emp显式转换为它指向的对象的类型
方法的查找
当我们进行类型转化之后,就意味着将原本的类型传回来之后会有至少两个类型,也就是原类型和新类型,那我们应该将传回来的参数放在哪里呢?
实例方法的查找
从对象创建时的类开始,沿类层次向上查找。
Manager man = new Manager();
Employee emp1 = new Employee();
Employee emp2 = (Employee)man;
emp1.computePay(); // 调用Employee类中的computePay()方法
man.computePay(); // 调用Manager类中的computePay()方法
emp2.computePay(); // 调用Manager类中的computePay()方法
类方法查找
在引用变量声明时所属的类中进行查找。
Manager man = new Manager();
Employee emp1 = new Employee();
Employee emp2 = (Employee)man;
man.expenseAllowance(); //in Manager
emp1.expenseAllowance(); //in Employee
emp2.expenseAllowance(); //in Employee!!!
多态(一)
多态的概念
多态,指的是不同类型的对象可以相应相同的消息,以下情况可以当作是同一类型的消息:
- 超类对象和从超类派生出的多个子类的对象
- 实现同一接口不同类型的对象
由于多态性,可以向不同类型的对象发送同一消息,不同的类型会根据不同的情况进行处理
多态的作用/目的
- 使代码变得简单且容易理解;
- 使程序具有很好的可扩展性。
绑定
绑定的概念
方法调用:就是调用一个类中的方法或者函数的行为
方法主题:就是方法体,也就是大括号里面的内容
绑定:指将一个方法调用与一个方法主体连接到一起。
绑定的分类
绑定分为两类:静态绑定(早绑定)换个动态绑定(晚绑定)
静态绑定
程序运行之前执行绑定(编译时绑定),这种类型的绑定适用于类方法和私有方法,因为这些方法不能被子类重写,所以编译器可以直接决定调用哪个方法。此外,构造函数的调用也是通过静态绑定来完成的。
动态绑定
是基于对象的类别,在程序运行时执行绑定。这种类型的绑定主要适用于非静态、非私有的实例方法,特别是当存在继承关系并且子类重写了父类的方法时。动态绑定是Java实现多态性的基础之一,它允许程序更加灵活地处理对象,因为在运行时可以根据对象的真实类型调用适当的方法实现。
PS:这些笔记是我个人所写,难免存在一些疏漏或错误。如果大家在阅读过程中发现任何问题,请不吝赐教,我将非常感激您的指正和谅解。如笔记内容涉及任何侵权问题,请及时与我联系,以便我尽快做出相应的删除处理。