多态性
向上转型:多态
理解:可以理解为一个事物的多种形态
何为多态性:
对象的多态性:父类的引用指向子类的对象(或子类的对象付给父类的引用)
举例:
多态性的使用:虚拟方法调用
有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法
编译看左边,运行看右边
多态使用的前提
类的继承、方法的重写
举例
多态性使用的注意点
对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)
向下转型
为什么使用向下转型:
有了对象的多态性以后,内存实际上是加载了子类特有的属性和方法,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法,子类特有的属性和方法不能调用
如何使用向下转型
使用强制类型转换符:()
使用时的注意点
使用强转时可能会出现ClassCastException异常
为了避免出现ClassCastException异常,我们通常在向下转型时会先进行instanceof的判断,返回结果为true,进行向下转型,返回为false,不进行向下转型
instanceof的使用:
判断对象a是否是类A的实例,如果是,返回true;如果不是,返回false
如果a instanceof A返回true,则a instanceof B也返回true(类B是类A的父类)
要求a所属的类于类A必须是父类和子类关系,否则编译错误
Object类及内部方法
Object类是所有Java类的根父类
如果在类的声明中未使用exetnds关键字指明其父类,则默认父类未java.lang.Object类
Object类中的功能(属性、方法)具通用性
属性:无
方法:equals() /toString() /getClass() /hashCode() /clone()
finalize() /wait() /notufy() /notifyAll()
Object类只声明了一个空参的构造器
equals()的使用方法
1、是一个方法,而非运算符
2、只能适用于引用数据类型
3、Object类中equals()的定义:
Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同,即两个引用是否指向同一个实体对象
4、像String、Data、File、包装类都重写了Object类中的equals()方法。重写后,比较的不是两个引用的地址是否相同,而是比较两个对象的实体内容是否相同
5、通常情况下,我们自定义的类如果使用equals()的话,也是通常比较两个对象的实体内容是否相同,那么我们就需要对Object类中的equals()进行重写。
重写原则:比较两个对象的实体内容是否相同
如何重写equals()方法
开发中自动生成
toString()方法
当我们输出一个对象的引用时,实际上就是调用当前对象的toString()
Object类中toString()的定义:
像String、Date、File、包装类等都重写了Object类中toString()的方法使得再调用对象的toString()时,返回实体内容信息
自定义类也可以重写toSting()方法,当调用此方法时,返回对象的实体内容信息
重写toString()
包装类的使用
为什么要有包装类:基本数据类型的变量具有类的特征,引入包装类
基本数据类型与对应的包装类:
需要掌握的类型间的转换:(基本数据类型、包装类、String)
基本数据类型<----->包装类:自动装箱、自动拆箱
基本数据类型、包装类----->String:调用String重载的valueOf(Xxx xxx)
String----->