当前位置: 首页 > 面试题库 >

Java super()继承

李光华
2023-03-14
问题内容

问题的简短摘要:我有一个父类,并由子类扩展。

     public class Parent{

        public Parent(){
          //constructor logic
        }
     }

该子类使用super调用Parent的构造函数:

     public class Child extends Parent{

         public Child(){
            super();
         }
     }

我想知道是否可以在Grandchild类的构造函数中调用super()方法来扩展Child类:

    public class Grandchild extends Child{

         public Grandchild(){
            super();
         }
    }

问题答案:

super()在继承上一级调用构造函数,如果存在无参数的构造函数,则将隐式调用该构造函数。

对象是从继承的最高层初始化的,在您的情况下是对象>父>子>孙。

从文档中:

If a constructor does not explicitly invoke a superclass constructor, the Java compiler
automatically inserts a call to the no-argument constructor of the superclass. If the super 
class does not have a no-argument constructor, you will get a compile-time error. Object does 
have such a constructor, so if Object is the only superclass, there is no problem.


 类似资料:
  • FAQs in section [24]: [24.1] 如何表示“私有继承”? [24.2] 私有继承和组合(composition)有什么类似? [24.3] 我应该选谁:组合还是私有继承? [24.4] 从私有继承类到父类需要指针类型转换吗? [24.5] 保护继承和私有继承的关系是什么? [24.6] 私有继承和保护继承的访问规则是什么? 24.1 如何表示“私有继承”? 用 : priv

  • 问题内容: 假设Java具有以下层次结构类: 这是C#中相同代码的(盲)重复: 当我执行Java代码时,我得到了C#返回的信息。 对我来说,C#的结果更有意义,因为引用B调用了它自己的方法。 Java设计者决定打印而不是打印的逻辑是什么?我的意思是,为什么引用B在C中使用覆盖方法?这种方法的优势是什么? 如何更改Java代码以像C#一样打印出来?我的意思是,我怎么教Java调用它使用的完全引用的方

  • 有人能解释我这里发生了什么,为什么? 此代码的输出将是3 3,3,3。 如果我只用 getter 取消注释第 1 行,输出将是 3 2、2、2。 如果我只用setter取消对第2行的注释,输出将是1 1,1,1。 如果我取消对第1行和第2行的注释(用setter和getter),输出将是1 3,3,3。 如果用子类中的代码覆盖父类中的方法,则该覆盖方法不能访问私有成员变量,即使父类中被覆盖的方法可

  • 一个类可以从另一个类继承方法、属性和其他的特性。当一个类从另一个类继承的时候,继承的类就是所谓的子类,而这个类继承的类被称为父类。在 Swift 中,继承与其他类型不同的基础分类行为。 在 Swift 中类可以调用和访问属于它们父类的方法、属性和下标脚本,并且可以提供它们自己重写的方法,属性和下标脚本来定义或修改它们的行为。Swift 会通过检查重写定义都有一个与之匹配的父类定义来确保你的重写是正

  • 本页包含内容: 定义一个基类(Base class) 子类生成(Subclassing) 重写(Overriding) 防止重写 一个类可以继承(inherit)另一个类的方法(methods),属性(property)和其它特性。当一个类继承其它类时,继承类叫子类(subclass),被继承类叫超类(或父类,superclass)。在 Swift 中,继承是区分「类」与其它类型的一个基本特征。

  • 构造函数的继承 __proto__属性 属性的继承 对象的原生属性 对象的继承属性 获取所有属性 对象的拷贝 参考链接 构造函数的继承 JavaScript通过构造函数生成实例对象,所以要实现对象的继承,就是要实现构造函数的继承。 假定有一个Shape构造函数。 function Shape() { this.x = 0; this.y = 0; } Shape.prototype.mo

  • 目标 了解类分层结构的概念 了解实现构造方法的各种方式 了解何时和为什么使用抽象类和方法 了解如何将一个引用从一个类赋给一个类型属于另一个类的变量。 继承的工作原理 Java 代码中的类存在于分层结构中。分层结构中的给定类上方的类是该类的超类。这个特定的类是分层结构中每个更高层的类的子类。子类继承它的超类。java.lang.Object 类位于类分层结构的顶部 — 所以每个 Java 类是 Ob

  • 主要内容:多继承下的构造函数,命名冲突在前面的例子中,派生类都只有一个基类,称为 单继承(Single Inheritance)。除此之外, C++也支持 多继承(Multiple Inheritance),即一个派生类可以有两个或多个基类。 多继承容易让代码逻辑复杂、思路混乱,一直备受争议,中小型项目中较少使用,后来的 Java、 C#、 PHP 等干脆取消了多继承。 多继承的语法也很简单,将多个基类用逗号隔开即可。例如已声明了类A