zoukankan      html  css  js  c++  java
  • 构造器里面的super()有什么用?到底写不写?

    平时写的单独一个类如果没有直接继承父类就是直接继承的Object,有父类就是间接继承的Object,因为父类会继承Object,java的所有类都是Object的子类,哪怕不写super(),也会默认调用的父类的空构造器。

    接下来举个例子

    class A{
        public A() {
            System.out.println("A的无参数构造器");
        }
        public A(int num) {
            System.out.println("A的有参数构造器,参数为:" + num);
        }
    }
    class B extends A{
        public B() {
            System.out.println("B的构造器");
        }
    }
    public class test {
        public static void main(String[] args) {
            B bb = new B();
        }
    }
    

    结果是:

    A的无参数构造器

    B的构造器

    也就是子类默认会隐式调用父类的构造器,默认在B构造器第一行添加了super();

    接着一个例子:

    class A{
        public A() {
            System.out.println("A的无参数构造器");
        }
        public A(int num) {
            System.out.println("A的有参数构造器,参数为:" + num);
        }
    }
    class B extends A{
        public B() {
            super(123);
            System.out.println("B的构造器");
        }
    }
    public class test {
        public static void main(String[] args) {
            B bb = new B();
        }
    }

    结果是:

    A的有参数构造器,参数为:123

    B的构造器

    显示调用了父类的构造器,就不会隐式调用空构造器了

    最后一个例子:

    class A{
        public A(int num) {
            System.out.println("A的有参数构造器,参数为:" + num);
        }
    }
    class B extends A{
        public B() {
            System.out.println("B的构造器");
        }
    }
    public class test {
        public static void main(String[] args) {
            B bb = new B();
        }
    }

    此时A没有空构造器,B也没有显示调用A的构造器,默认隐式调用super A();

    但是此时A的空构造器没有定义,所以会报错。

    自己在android中也遇到了


    这个ArrayAdapter没有空构造器,所以这个super去掉是错误的。

    综上所述,如果父类有空构造器,super()可以不写,但如果父类只有含参数的构造器,这个super(...)一定要写,并且要对应父构造器的参数,否则就会报错!

    ========================================Talk is cheap, show me the code=======================================

    CSDN博客地址:https://blog.csdn.net/qq_34115899
  • 相关阅读:
    Intent flag 与启动模式的对应关系
    Activity的启动模式---总结
    NDK---使用,开发步骤
    自定义ViewGroup
    android:process结合activity启动模式的一次实践
    Java单元测试之覆盖率统计eclemma
    Java单元测试之JUnit篇
    结对编程1
    个人作业1——四则运算题目生成程序(基于控制台)
    Coding使用方法
  • 原文地址:https://www.cnblogs.com/lcy0515/p/9179747.html
Copyright © 2011-2022 走看看