关闭

继承_super()

标签: java构造函数继承super
85人阅读 评论(0) 收藏 举报
分类:

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

    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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9863次
    • 积分:282
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:11篇
    • 译文:0篇
    • 评论:0条