java多态的理解

Posted dojavabyheart

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java多态的理解相关的知识,希望对你有一定的参考价值。

对于java中,非常重要的一个概念就是多态,但多态里面的很多坑是很容易被忽视的,在此,我总结一下我遇到的坑。

1、对于域和静态方法,是不存在多态的。demo如下:

package com.zh.model;

public class Test2 {
    public int index = 0;

    public int getIndex() {
        return index;
    }
    public static void main(String[] args) {
        Test2 test2 = new Child();
        System.out.println("test2.index="+test2.index+"  test2.getIndex()="
        +test2.getIndex());
        Child child = new Child();
        System.out.println("child.index="+child.index+"  child.getIndex()="
                +child.getIndex());
    }
}
class Child extends Test2{
    public int index = 1;

    public int getIndex() {
        return index;
    }

    public int getSuperIndex(){
        return super.index;
    }
}

输出结果为:技术分享图片

 2、父类没有默认构造器,有带参数的构造器时,子类必须显式编写调用父类构造器的语句super(。。。)

技术分享图片

如图,如果没有显式使用super关键字则会报错。

3、使用父类类型的引用指向子类的对象时多态加载顺序:即  在main‘方法中执行Parent parent = new Children();

先加载根基类中static初始化----根基类的子类static初始化----。。。。-----该类的static初始化-----对象中所有基本类型初始化为默认值,引用类型设为null-----调用父类构造器----调用子类构造器

 class Parent {
public static int parent = 1;
static {
System.out.println(parent);
}
public Parent() {
System.out.println("Parent");
}


public static void main(String[] args) {
Parent aaa = new Children();
}
}
class Children extends Parent{
public static int children = 2;
static {
System.out.println(children);
}
public Children() {
System.out.println("Children");
}
}

输出:技术分享图片

 























以上是关于java多态的理解的主要内容,如果未能解决你的问题,请参考以下文章

java8-3 多态的好处和弊端以及多态的理解

Java多态的理解

Java基础(多态的理解与应用)

[java面试]关于多态性的理解

理解Java多态

理解 Java 的三大特性之多态