继承_super()

来源:互联网 发布:信用卡在淘宝限额 编辑:程序博客网 时间:2024/05/17 23:04

创建子类实例时,会先执行父类构造函数定义的流程,再执行子类构造函数定义的流程。如下例:

    class Some{        Some(){            System.out.println("调用Some()");        }    }    class Other extends Some{        Other (){            System.out.ptintln("调用Other()");        }    }

如果执行new Other(),是先执行Some()中的流程,再执行Other中的流程,也就是显示结果为:

    调用Some()    调用Other()

继续看原因:
我们知道,父类中可以重载多个构造函数,如果子类构造函数中没有指定执行父类的哪一个构造函数,默认就会调用父类的无参构造函数。如果想要执行其他某一个构造函数,可以使用super()指定,例如:

class Some{    Some(){        System.out.println("调用Some()");    }    Some(int i){        System.out.println("调用Some(int i)");    }}class Other extends Some{    Other (){        super(10);    //指定某一构造方法,不一定打印输出。        System.out.ptintln("调用Other()");    }}

在这个例子中,new Other()时,首先执行了super(10),表示调用构造函数时传入int数值10,也就是调用父类中Some(int i)版本的构造函数,而后再继续执行Other()中super(10)之后的流程。


重点来了,其实当你这么撰写时:

    class Some{        Some(){            System.out.println("调用Some()");        }    }    class Other extends Some{        Other (){            System.out.ptintln("调用Other()");        }    }

前面谈过,如果子类的构造函数中没有指定调用父类的哪一个构造函数,那么默认调用父类的无参构造函数,也就相当于你这么写:

    class Some{        Some(){            System.out.println("调用Some()");        }    }    class Other extends Some{        Other (){            super();    //super()默认省略。            System.out.ptintln("调用Other()");        }    }


注意:
this()与super()只能择一调用,并且一定要在构造函数的第一行。

0 0
原创粉丝点击