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
  • 相关阅读:
    宏定义中的#
    HDU1506 Largest Rectangle in a Histogram 动态规划
    HDU1864 最大报销额 DP
    POJ2771 Guardian of Decency 最大独立子集
    POJ1698 Alice's Chance 最大流
    HDU1003 Max Sum 动态规划
    eval格式化事件类型的字符串
    C#虚方法virtual详解
    c# 利用反射获得某个类或者对象的所有属性
    windows服务的通常写法
  • 原文地址:https://www.cnblogs.com/lcy0515/p/9179747.html
Copyright © 2011-2022 走看看