Java面向对象学习笔记(四)
面向对象特征之三:多态性
一、理解多态性:
可以理解为一个事物的多种形态
二、何为多态性:
对象的多态性,父类的引用指向子类的对象(或子类对象赋给父类的引用)
三、多态的使用:
虚拟方法调用
有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
总结:编译看左边,运行看右边
四、多态性的使用前提:
①类的继承关系②、方法的重写
五、
对象的多态性,只适用于方法,不适用于属性
六、向下转型和instanceof
instanceof关键字的使用:
a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false。
使用情境:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先
进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。
如果 a instanceof A返回true,则 a instanceof B也返回true.
其中,类B是类A的父类。
七、java.lang.Object类
1、Object类是所有Java类的根父类
2、如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
3、Object类中的功能具就具有通用性。
属性:无
方法:equals()/
final、finally、finalize的区别
八、面试题: == 和 equals() 区别
1、回顾 == 的使用:
== :运算符
①. 可以使用在基本数据类型变量和引用数据类型变量中
②. 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)
如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
补充: == 符号使用时,必须保证符号左右两边的变量类型一致。
2、equals()方法的使用:
①. 是一个方法,而非运算符
②. 只能适用于引用数据类型
③. Object类中equals()的定义:
public boolean equals(Object obj) {
return (this == obj);
}
说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
④. 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是
两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
⑤. 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们
就需要对Object类中的equals()进行重写.
重写的原则:比较两个对象的实体内容是否相同.
九、Object类中toString()的使用:
①. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString()
②. Object类中toString()的定义:
public String toString() {
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}
③. 像String、Date、File、包装类等都重写了Object类中的toString()方法。
使得在调用对象的toString()时,返回"实体内容"信息
④. 自定义类也可以重写toString()方法,当调用此方法时,返回对象的"实体内容"
十、 Java中的JUnit单元测试
步骤:
1.选中当前工程 - 右键选择:build path - add libraries - JUnit 4 - 下一步
2.创建Java类,进行单元测试。
此时的Java类要求:① 此类是public的 ②此类提供公共的无参的构造器
3.此类中声明单元测试方法。
此时的单元测试方法:方法的权限是public,没有返回值,没有形参
4.此单元测试方法上需要声明注解:@Test,并在单元测试类中导入:import org.junit.Test;
5.声明好单元测试方法以后,就可以在方法体内测试相关的代码。
6.写完代码以后,左键双击单元测试方法名,右键:run as - JUnit Test
说明:
1.如果执行结果没有任何异常:绿条
2.如果执行结果出现异常:红条
十一、包装类的使用:
1.java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征
2.掌握的:基本数据类型、包装类、String三者之间的相互转换
String类型 —>基本数据类型、包装类:调用包装类的parseXxx(String s)
基本数据类型、包装类—>String类型:调用String重载的valueOf(Xxx xxx)
JDK 5.0 新特性:自动装箱 与自动拆箱
十二、
Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[],
保存了从-128到127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在-128到127范围内时,可以直接使用数组中的元素,不用再去new了。目的:提高效率

浙公网安备 33010602011771号