java - 如果没有 super 类, super 构造函数?

标签 java polymorphism

我找到了这样一个类:

public class Computer implements Serializable {

        private static final long serialVersionUID = 1L;    

        //...
        public Computer() {
            super();
        }
        //...
}

谁能给我解释一下,这是怎么回事?该类没有继承任何父类(super class),仍然可能有“super();”在构造函数中?

最佳答案

默认所有类都继承java.lang.Object。所以你类(class)中的一个隐藏代码是

public class Computer extends java.lang.Object implements Serializable {

        private static final long serialVersionUID = 1L;    

        //...
        public Computer() {
            super(); //here Object's default constructor is called
        }
        //...
}

如果父类有默认构造函数(无参数)并且子类定义了默认构造函数,则不需要显式调用父类的构造函数。

Java 是隐式执行的,换句话说,Java 将 super() 放在子构造函数的 first statement 之前

考虑这个例子

class Base {

    public Base() {
        System.out.println("base");
    }
}

class Derived extends Base {

    public Derived() {
        //super(); call is not necessary.. Java code puts it here by default
        System.out.println("derived");
    }
}

因此,当您创建 Derived d = new Derived(); 时,输出是..

base
derived

关于java - 如果没有 super 类, super 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21181125/

相关文章:

ruby-on-rails - Rails : Polymorphism, String:Class 的未定义方法 `primary_key'

c# - C#中的接口(interface)多态性

c++ - 函数返回类型为父类时,如何返回子类的对象?

java - 在另一个类的构造函数中传递类类型?

java - Android - 按下时显示上次查看的 Activity (主页按钮 ->应用程序快捷方式)

java - 如何在 Java 类上的 Kotlin 中声明扩展静态函数?

java - netty select() 怎么会花这么多时间?

c++ - 使此代码正确多态

java - 如何克服这种 java 语法,使 double 成为字符串?

java - 线程主 java.util.InputMismatchException 中的异常