java学习(多态)

一、多态

含义:方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础上的。

多态的具体体现:

1)方法的多态 (例如重写和重载)

2)对象的多态

多态注意事项:

1)多态的前提是:两个对象(类)存在继承关系。

2)多态的向上转型java学习(多态)_第1张图片 

  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方法

java学习(多态)_第2张图片

六、toString方法

java学习(多态)_第3张图片

七、finalize方法

1.当对象被回收时,系统自动调用该对象的finalize方法。子类可以重写该方法,做一些释放资源的操作

2.什么时候被回收:当某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制(并不会马上销毁)来销毁该对象,在销毁该对象前,会先调用finalize方法。

3.垃圾回收机制的调用,是由系统来决定,也可以通过System.gc()主动触发垃圾回收机制

你可能感兴趣的:(学习)