一、多态
含义:方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础上的。
多态的具体体现:
1)方法的多态 (例如重写和重载)
2)对象的多态
多态注意事项:
1)多态的前提是:两个对象(类)存在继承关系。
2)多态的向上转型
1.本质:父类的引用指向了子类的对象
2.语法:父类类型 引用名=new 子类类型();
3.特点:编译类型看左边,运行类型看右边。
可以调用父类中的所有成员(需遵守访问权限)
不能调用子类中特有成员(在编译阶段,能调用哪些成员,是由编译类型决定的)
最终运行效果看子类的具体实现(即调用方法时,从子类开始查找方法)
3)多态的向下转型
1.语法:子类类型 引用名=(子类类型)父类引用
2.特点:只能强转父类的引用,不能强转父类的对象。
要求父类的引用必须指向的是当前目标类型的对象。
可以调用子类类型中的所有成员。
4)直接调用属性时,属性没有重写之说,属性的值看编译类型。
扩展:instanceOf比较操作符:用于判断对象的类型(此时讨论的是运行类型)是否为某类型或某类型的子类型
语法:引用类型变量(object) instanceof 类(class)
注:instanceof 前面的引用变量编译时的类型要么与后面的类型相同,要么与后面的类型具有父子继承关系
package object;
public class temp {
public static void main(String[] args) {
B b=new B();
System.out.println(b instanceof B);//结果为true
System.out.println(b instanceof A);//结果我true
}
}
class A{
}
class B extends A{
}
二、Java的动态绑定机制
三、多态的应用
1)多态数组:数组的定义类型为父类类型,里面保存的实际元素类型为子类类型。
2)多态参数:方法定义的形参类型为父类类型,实参类型允许为子类类型
四、==和equals的对比
1)==是比较运算符
2)equals: 是Object类中的方法,只能判断引用类型 ,默认判断的地址是否相等,子类中往往重写方法,用于判断内容是否相等。
五、hashCode方法
六、toString方法
七、finalize方法
1.当对象被回收时,系统自动调用该对象的finalize方法。子类可以重写该方法,做一些释放资源的操作
2.什么时候被回收:当某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制(并不会马上销毁)来销毁该对象,在销毁该对象前,会先调用finalize方法。
3.垃圾回收机制的调用,是由系统来决定,也可以通过System.gc()主动触发垃圾回收机制