理解多态性:一个事物的多种形态
何为多态性:对象的多态性-------->父类的引用指向子类的对象
多态的使用:即虚拟方法调用
有了对象的多态性后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
多态性的使用前提:类的继承关系、子类重写了父类的方法
对象的多态性只适用于方法,不适用于属性
为什么使用向下转型:
有了对象的多态性后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。这时使用强制类型转换符实现向下转型
a instanceof A : 判断对象a是否是类A的实例。如果是,返回true,如果不是,返回false
使用场景:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,
一旦返回true,就向下转型。如果返回false,则不向下转型。
== 和 equals方法的区别:
==:运算符
1、可以使用在基本数据类型变量和引用数据类型变量中
2、如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等(不一定要类型相同)
如果比较的是引用数据类型变量:比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体
equals()方法的使用:
1、是一个方法,而非运算符
2、只能适用于引用数据类型
3、Object类中定义的equals()和 == 作用是相同的,比较的是地址值是否相同
4、像String 、Data 、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否
相同,而是比较两个对象的实体内容是否相同。
5、通常情况下:我们自定义的类如果使用的equals()方法的话,,也通常是比较两个对象的实体内容是否相同。那么我们就需要对Object类的equals()方法进行重写。
包装类的使用:
java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征
总结:
Java5.0以前:
基本数据类型---->包装类:调用包装类的构造器
eg: int num1 = 10;
Integer in1 = new Integer(num1);
System.out.println(in1.toString());
包装类---->基本数据类型:调用包装类的xxxValue()方法
eg: Integer in1 = new Integer(12);
int i1 = in1.intValue();
System.out.println(i1 + 1);
Java5.0新特性以后:
基本数据类型---->包装类:即自动装箱
eg: int num2 = 10;
Integer in1 = num2;
包装类---->基本数据类型:即自动拆箱
eg: int num3 = in1;
到了Java5.0以后,就不加区分的在基本数据类型和包装类中互相转换
基本数据类型、包装类----->String类型:调用String重载的valueOf( )方法
eg: float f1 = 12.3f;
String str2 = String.valueOf(f1);
Double d1 = new Double(12.4);
String str3 = String.valueOf(d1);
String类型----->基本数据类型、包装类:调用包装类的parseXxx(String s)方法
eg: String str1 = "123";
int num1 = Integer.parseInt(str1);
System.out.println(num1 + 1);
String str2 = "true";
boolean b1 = Boolean.parseBoolean(str2);
System.out.println(b1);