Java 构造方法中的多态

类的实例化顺序是先实例化父类在实例化子类,也就是先调用父类的构造方法,再调用子类的构造方法,如果在构造方法中调用其他多态方法,可能导致不正确的结果。

下面的例子,在父类中调用study()方法的时候,会有点问题


class Person {
    public void study() {
        System.out.println("I am studing!");
    }

    public Person() {
        study();
    }

}

class Student extends Person {
    private int age;

    public Student() {
        this.age = 15;
        study();
    }

    public void study() {
        System.out.println("I am " + age + " years old, I am studing!");
    }
}

public class Constructor {
    public static void main(String[] args) {
        Person person = new Student();
        person.study();

    }

}

执行结果;

I am 0 years old, I am studing!
I am 15 years old, I am studing!
I am 15 years old, I am studing!

在父类的构造方法中调用study方法时, 其实Student中的age还没有初始化,因此是默认值0。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 1,184评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,091评论 0 4
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,263评论 0 2
  • 最近一直在看书,看了一些书,心里也对书上多的一些道理表示赞同,但问题是,很多事是自己未曾经历的,没有形成自己的...
    张鑫景阅读 346评论 0 1