构造器内部的多态方法的行为

    xiaoxiao2023-03-24  4

    在一般的方法内部,动态绑定的调用是在运行时才决定的,因为对象无法指定它是属于方法所在的那个类,还是属于哪个类的导出类

    如果要调用构造器内部的一个动态绑定方法,就要用到那个方法的被覆盖后的定义

    例子:

    class Parent {

    void draw() {

    System.out.println("Parent draw()");

    }

    Parent() {

    System.out.println("before Parent draw()");

    draw();

    System.out.println("after Parent draw()");

    }

    }

    class Son extends Parent {

    private String content = "sun";

    Son(String content) {

    this.content = content;

    System.out.println("Son constructor(), content is " + content);

    }

    void draw() {

    System.out.println("Son draw(), content is " + content);

    }

    }

    public class Test {

    public static void main(String[] args) {

    new Son("moon");

    }

    }

    //Output:

    before Parent draw()

    Son draw(), content is null

    after Parent draw()

    Son constrcutor(), content is moon

    Son draw(), content is moon

    Parent.draw()方法设计被覆盖,这种覆盖是在Son中发生的。但Parent构造器会调用这个方法,结果导致了对Son.draw()的调用,由于被覆盖的draw()方法在Son构造器之前调用,所以content为null

    转载请注明原文地址: https://ju.6miu.com/read-1201222.html
    最新回复(0)