面向对象的特征三: 多态性
Object类
包装类
一.多态性
- 多态性的表现: ①方法的重载与重写 ②子类对象的多态性
- 使用的前提: ①要有继承关系 ②要有方法的重写
- 格式:
One More Thing 👇
1 | class Person{ |
1 | Person p = new Man();//向上转型 |
- 编译时, 认为p是Person类型的, 故只能执行Person里才有的结构, 即Man里特有的结构不能够调用
子类对象的多态性, 并不使用于属性. - 关于向下转型:
①向下转型,使用强转符: ()
②为了保证不报ClassCastException, 最好在向下转型前, 进行判断: instanceof
1 | // 若a是A类的实例, 那么a也一定是A类的父类的实例。 |
二.Object类
-
java.lang.Object 类, 是所有类的根父类!
-
Object类仅有一个空参的构造器 public Object(){ }
关于方法:
① equals(Object obj)
1 | public boolean equals(Object obj) { |
A.基本数据类型: 根据基本数据类型的值判断是否相等. 相等返回true, 反之返回false
注意: 两端数据类型可以不同, 在不同的情况下, 也可以返回true.
B.引用数据类型: 比较引用类型变量的地址值是否相等.
而我们希望比较的两个对象的属性值都相同的情况下返回true的话, 要重写Object类的equals(Object obj)方法
像String类 File类 Date类…重写了Object类的equals()方法, 比较是两个对象的"实体内容"是否完全相同
② toString()
- 当我们输出一个对象的引用时, 会默认调用toString()方法.
- 当我们没有重写Object类的toString()方法时, 打印的就是对象所在的类, 以及对象实体在堆空间的位置
- 而我们一般需要重写Object类的toString()方法, 将此对象的各个属性值返回.
- 像String类、Date、File类、包装类都重写了toString()方法.
1 | //Object类的toString() |
String的内存结构:
三.包装类
Wrapper Class, 包装类均位于java.lang包下
基本数据类型由于不是类, 不能够使用Java类库里提供的大量的方法. 所以在设计上, 我们让每一个基本数据类型都对应一个类, 同时数据存储的范围还不变. 此时, 相当于基本数据类型就具有了类的特点. 这些类即为包装(wrapper 或封装类)
- boolean ==> Boolean
- byte ==> Byte
- short ==> Short
- int ==> Integer
- long ==> Long
- char ==> Character
- float ==> Float
- double ==> Double
需要掌握的:
基本数据类型、包装类、String类之间的转换!
简易理解:
- 基本数据类型与对应的包装类有自动装箱、自动拆箱 (JDK5.0之后)
1 | //如下: |
- 基本数据类型、包装类---->String类: 调用String类的重载的valueOf(Xxx xx);
- String类---->基本数据类型、包装类: 调用相应的包装的parseXxx(String str);
1 | //注意: |
- 特别的: Boolean的默认初始化值为null, 而boolean的默认初始化值为false;
1 | Boolean b = new Boolean("true");//除了这样传参之外, 其他传参均为false |