一、多态性
1.理解多态性:可以理解为一个事物的多种形态。
2.何为多态性:
对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
3.多态的使用:虚拟方法调用
有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
总结:编译,看左边;运行,看右边。
4.多态性的使用前提:①类的继承关系 ②方法的重写
5.对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)
多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法–--虚拟方法调用
6.instanceof操作符
二、object类结构的解刨
java.lang.object类
1.0bject类是所有Java类的根父类
2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.0bject类
3.0bject类中的功能(属性、方法)就具有通用性。
属性:无
方法:toString()、equals()、getClass()hashCode()、clone()、finalize()
4. object类只声明了一个空参的构造器
面试题:
一、==的使用
==:运算符
1、可以使用在基本数据类型和引用数据类型变量中
2、如果比较的是基本数据类型变量:比较两个变量保存的数据是否一样(不一定数据类型类型一样)
如果比较的是引用数据类型变量:比较的是对象的地址值是否相同
二、equals()方法的使用
1、是一个方法,而得运算符
2、适用于引用数据类型
3.object类中equals()的定义:
public boolean equals(Object obi){
return (this ==obi);
}
说明:0bject类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
4、像String、Date、File、包装类等都重写了0bject类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
5.通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写
三、object 类中toString()的使用
1.当我们输出一个对象的引用时,实际上就是调用当前对象的toString()
2. object类中toString()的定义:
public string toString() {
return getclass( ).getName() +“@" + Integer.toHexString(hashCode());
3.像String、Date、File、包装类等都重写了Object类中的toString()方法。
使得在调用对象的toString()时,返回""实体内容"信息.
4.自定义类也可以重写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 TestI
说明:
1.如果执行结果没有任何异常绿条
2.如里执行结果里出现导常,红条
四、包装类的使用
1.java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特性
基本数据类型 | 包装类型 |
byte | java.lang.Byte(父类Number) |
short | java.lang.Short(父类Number) |
int | java.lang.Integer(父类Number |
long | java.lang.Long(父类Number) |
float | java.lang.Float(父类Number) |
double | java.lang.Double(父类Number) |
boolean | java.lang.Boolean(父类Object) |
char | java.lang.Character(父类Object) |
2.掌握的:基本数据类型、包装类、String三者之间的相互转换
#自动装箱和自动拆箱
//包装类--->基本数据类型:调用包装类的xxx的xxxValue()
//基本数据类型--->包装类:调用包装类的构造器
//基本数据类型、包装类--->String类型:调用Sting重载的valueOf(xxx xxx)
@Test
public void test3() {
int num1 = 1;
//方式一:连接运算
String str1 = num1 + " ";
//方式二:调用string的valueOf()
float f1 = 2.4f;
String str2 = String.valueOf(f1);
}
//String类型---> 基本数据类型、包装类:调用包装类的ParseXxx()
注意:转换时,可能会报NumberFormException
面试问题:
1.如何实现向下转型?需要注意什么问题?如何解决此问题?
Person p = new Man();
使用强转符:()
Man m = (Man)p; 注:强转不成功时出现ClassCastException异常
使用instanceof在进行向下转型前判断。if (a instanceof A){
Man m = (A)a;
}
instanceof:左边是对象,右边是一个类型,判断它是否可以进行强(判断对象a是否为A的引用)
2、对多态性的理解
①实现代码的通用性
②object类中定义的public boolean equals(Object obj){}
JDBC:使用Java程序操作(获取数据库连接、CRUD)数据库(MySQL、Oracle、DB2、sql server)
③抽象类、接口的使用肯定体现了多态性。(抽象类、接口不能实例化)