首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当有人在从抽象类继承的类的构造函数中调用super时,会发生什么?

当有人在从抽象类继承的类的构造函数中调用super时,会发生以下几个步骤:

  1. 首先,super关键字会调用父类(抽象类)的构造函数。
  2. 父类的构造函数会被执行,进行必要的初始化操作。
  3. 父类构造函数执行完毕后,控制权将传递回子类的构造函数。
  4. 子类的构造函数会继续执行,完成子类自己的初始化操作。

调用super关键字是为了在子类构造函数中访问父类的属性、方法或者执行父类的逻辑。通过调用super,子类能够继承父类的特性并进行个性化的扩展。

举例来说,假设有一个抽象类Animal,它有一个构造函数和一些共有的属性和方法。现在有一个子类Dog,它继承了Animal类。在Dog类的构造函数中调用super关键字,会首先执行Animal类的构造函数,然后执行Dog类的构造函数。

这种调用super的方式在面向对象编程中非常常见,它允许子类能够利用父类已经实现的功能,同时进行自己的个性化扩展。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云产品介绍:https://cloud.tencent.com/product
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 弹性伸缩(AS):https://cloud.tencent.com/product/as
  • 人工智能服务:https://cloud.tencent.com/product/ai
  • 物联网通信:https://cloud.tencent.com/product/iotexplorer
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

创建子类对象,父构造函数调用被子类重写方法为什么调用是子类方法?

A对象时候父调用子类方法?...但是:创建B对象父调用方法? 答案: 子类被加载到内存方法区后,继续加载父到内存。...如果,子类重写了父方法,子类方法引用会指向子类方法,否则子类方法引用会指向父方法引用。 如果子类重载了父方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载父方法,则方法引用会指向父方法。 子类对象创建先行调用构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是编译时候,父构造方法调用方法参数已经强制转换为符合父方法参数了。 上边代码在编译前已经转换为下面这个样子了。

6.1K10

关于Java构造函数(Constructor)常见问题总结1 为什么调用子类构造方法时候,默认会调用构造方法2 常见错误:Implicit super constructor is und

Paste_Image.png 继承自一个时候,构造方法就会首先调用super()方法。如果没有显式写这个语句,那么编译器就会自动插入这个语句。...这就是为什么我们上面的那个例子程序调用super构造方法。 但要切记,** 虽然调用了父构造方法,但只创建了一个对象也就是子对象。...编译器错误是因为默认super()无参构造函数是没有定义。在Java,如果一个没有定义构造函数,编译器自动插入一个默认无参构造函数。...解决这个问题很简单,我们可以给父插入一个无参构造函数,或者在子类构造函数显示调用有参构造函数。 在子类构造函数显示调用构造函数 下面的代码是正确。 ?...我们知道如果在一个没有声明一个构造函数,那么编译器隐式帮我们实现一个无参构造函数,但如果我们一旦一个构造函数,不管带不带参数,那么编译器都不会提供默认构造函数,所以这么做原因是为什么呢?

2.7K41

ASP.NET AJAX(6)__Microsoft AJAX Library面向对象类型系统命名空间——构造函数——定义方法——定义属性——注册——抽象类——继承——调用

可重复注册命名空间,每个独立脚本模块前都要注册命名空间以保证命名空间存在 定义构造函数 定义成员(方法、属性、事件) 注册 ——构造函数 构造函数即为function定义 通常用于初始化域变量...——抽象类 包含抽象方法即为抽象类 MyNamespace.MyClass.prototype{this...._mymethod=function{throw Error.notImplemented();}}//包含抽象方法 ——继承 调用构造函数 有父必须调用构造函数,否则会丢失继承效果...可以直接以普通方式实现父抽象成员 toString方法无法被继承 ——调用方法 MyNamespace.MyClass.prototype={myMethod:function(param1...Employee三个 接口 与定义方法大致相同 构造函数抛出异常 所有的方法抛出异常(只有方法签名,不提供实现) 注册接口使用registerInterface方法 接口无法继承其他接口 接口定义

6.2K50

TypeScript手记(四)

它表示我们访问成员。 最后一行,我们使用 new 构造了 Greeter 一个实例。它会调用之前定义构造函数,创建一个 Greeter 类型新对象,并执行构造函数初始化它。...与前一个例子不同点是,派生包含了一个构造函数,它 必须调用 super(),它会执行基构造函数。而且,在构造函数里访问 this 属性之前,我们 一定要调用 super()。...我们创建了几个这些实例,并相互赋值来看看会发生什么。因为 Animal 和 Rhino 共享了来自 Animal 里私有成员定义 private name: string,因此它们是兼容。...') // 在派生构造函数必须调用 super() } printMeeting(): void { console.log('The Accounting Department...把当做接口使用 如上一节里所讲定义创建两个东西:实例类型和一个构造函数。因为可以创建出类型,所以你能够在允许使用接口地方使用

49430

day5(面向对象2)

: 1.变量 2.函数 3.构造函数 3.1.子父变量特点 如果子类中出现非私有的同名成员变量,子类要访问本类变量,用this super代表是父对象引用 3.2.子父函数特点...子类和父中出现一样函数子类对象调用函数运行子类函数内容。...子父构造函数: 在对子类对象进行初始化 ,弗父构造函数运行,那是因为子类构造函数第一行默认有一条隐式语句super(); super():访问父中空参数构造函数。...而且子类中所有的构造函数默认第一行都是super() 为什么子类一定要访问父构造函数?...子类实例化过程: 结论:子类所有的构造函数默认都会访问父中空参数构造函数,因为子类每一个构造函数第一行都有一句隐式super() 没有空构造函数,子类必须手动通过super或者this

32420

Java学习笔记【持续更新】

构造函数:对象创建,就会调用与之对应构造函数,对对象进行初始化操作 一般函数:对象创建后,需要函数功能调用 构造函数:对象创建,会调用调用一次 一般函数:对象创建后,可以被调用多次 什么时候定义构造函数呢...java支持多层(多重)继承 C继承B,B继承A,就会出现继承体系 要使用一个继承体系, 1.查看该体系顶层,了解该体系基本功能 2.创建体系最子类对象,完成功能使用 什么时候定义继承...区分父 this和super用法很相似 this:代表一个本类对象引用 super:代表一个父类空间 成员函数子父中出现成员函数一模一样情况,运行子类函数,这种现象称为覆盖操作,这是函数在子父特性...就在子类构造函数中加入了super()语句 如果父没有定义空参数构造函数,那么子类构造函数必须用super来明确要调用哪个构造函数,同时子类构造函数如果使用this调用了本类构造函数,...,对对象属性进行默认初始化操作, 4.调用对应构造函数进行初始化 5.在构造函数,第一行先到调用构造函数进行初始化 6.父初始化完毕后,再对子类属性进行显示初始化 7.再进行子类构造函数特定初始化

1.3K50

Java 基础概念·Java 继承

如果一个包含抽象方法,那么这个必须声明为抽象类抽象类和普通最大区别是,抽象类不能被实例化,需要继承抽象类才能实例化其子类。...super 访问父构造函数:可以使用 super() 函数访问父构造函数,从而委托父完成一些初始化工作。...应该注意到,子类一定会调用构造函数来完成初始化工作,一般是调用默认构造函数,如果子类需要调用其它构造函数,那么就可以使用 super 函数。...// A.show(A) // 在 B 在从 A 继承 show(C obj),直接调用 b.show(c); // A.show(C) // 在 B 不存在 show...上面提到那种动态绑定认为是动态多态,因为只有在运行期才能知道真正调用是哪个方法。还有一种静态多态,一般认为 Java 函数重载是一种静态多态,因为他需要在编译期决定具体调用哪个方法。

48740

常见java面试基础问题(二) | 附赠程序员面试必看经典图书

懒汉式多线程时候容易发生问题 Math使用(重点) 数学操作:该类没有构造函数,方法均为静态 成员变量: E:比任何其他值都更接近e(即自然对数底数)double值。...构造方法 子类实例化过程,子类创建对象先去创建父对象。默认是去调用无参构造方法。子类构造方法,第一行默认是super() 为什么子类第一行默认有super()?...没有无参构造方法,必须使用this或者super调用其他构造方法。 this和super区别 this:代表本类对象引用。 super:代表父存储空间。...抽象类问题 A:抽象类是否有构造方法?能不能被实例化?如果不能,为什么构造方法? 抽象类构造方法。 抽象类不能被实例化。 抽象类构造方法供子类实例化调用。...抽象类可不可以没有抽象方法?如果可以,这样什么用吗? 抽象类可以没有抽象方法。 抽象类没有抽象方法作用,只是为了不让别的建立该抽象类对象。这个在awt中有体现。

34530

Java基础小结(二)

super 可用于: 1、调用构造方法; 2、调用方法(子类覆盖了父方法); 3、访问父数据域(可以这样用但没有必要这样用)。...构造器 1、子类不能继承构造器(构造方法或者构造函数),但是父构造器带有参数,则必须在子类构造显式地通过super关键字调用构造器并配以适当参数列表。...2、如果父有无参构造器,则在子类构造器中用super调用构造器不是必须,如果没有使用super关键字,系统自动调用无参构造器。...若Dog含有bark方法,但Animal没有,b调用bark方法抛出编译错误,因为b引用类型Animal没有bark方法。...(); 使用多态方式调用方法,首先检查父是否有该方法,如果没有,则编译错误;如果有,再去调用子类同名方法。

66210

Java基础语法(八)——面向对象

继承,我们之前遇到就是 super() 我们 Cat 在继承Animal ,在自己构造方法当中 首先要帮助父构造,于是就是用 super(),调用构造方法。...给大家做一个示例 我们在函数定义要求传一个 Animal 参数,实际上却传了 Cat 变量,因为他们是有继承关系,在传参时候就发生了向上转型。...向下转型,使用情况不多,因为使用向下转型非常不安全 3.动态绑定 子类和父中出现同名方法时候, 再去调用会出现什么情况呢?...抽象方法作用 抽象类存在目的就是为了被其他继承,位于继承顶端 抽象类里面可以有普通方法也可以有抽象方法,也可以定义普通成员变量,也可以定义静态常量 抽象类 可以有构造函数,但是构造函数不是用来创建对象...,而是其子类调用构造函数来完成抽象类初始化操作。

30930

java基础知识总结(绝对经典)

子父中出现了一模一样方法,建立子类对象运行子类方法。好像父方法被覆盖掉一样。所以这种情况,是函数另一个特性:覆盖(复写,重写) 什么时候使用覆盖呢?...原因:子类所有构造函数第一行,其实都有一条隐身语句super(); super(): 表示父构造函数,并会调用于参数相对应构造函数。...而super():是在调用中空参数构造函数。 为什么子类对象初始化时,都需要调用函数?(为什么要在子类构造函数第一行加入这个super()?)...如果子类构造函数中用this来指定调用子类自己构造函数,那么被调用构造函数也一样访问父构造函数。 问题:super()和this()是否可以同时出现构造函数。...super()或者this():为什么一定要定义在第一行? 因为super()或者this()都是调用构造函数构造函数用于初始化,所以初始化动作要先完成。 继承细节: 什么时候使用继承呢?

64900

Java基础(二)面向对象(上)

继承 多态 java中用Class来描述事物: 属性:对应成员变量 行为:对应成员函数 成员变量 成员变量定义在,在整个中都可以被访问 成员变量随着对象建立而建立,存在于对象所在堆内存...和this用法有点相似 this代表本类对象引用 super代表父内存空间标识 子类要调用构造函数,可以使用super()语句 子类和父出现同名成员,可以用super进行区分 super...子类中出现与父中一模一样方法,会出现覆盖操作,也称为重写或者复写 父私有方法不可以被覆盖 在子类覆盖方法,继续使用被覆盖方法可以通过super函数名获取 覆盖需要注意问题: 覆盖...子类中所有的构造函数morning都会访问父中空参数构造函数 因为每一个构造函数第一行都有一条默认语句super() 子类具备父数据,所以要先明确父是如何对这些数据初始化。...没有空参数构造函数,子类构造函数必须通过this或者super语句指定要访问构造函数 final 关键字 final 可以修饰,方法和变量 final 修饰不可以被继承 final

45090

Java基础面试题&知识点总结(下篇)

解释一下封装、继承和多态。 问题 29. 什么是接口和抽象类?他们有什么区别? 问题 30. 什么构造函数?它与普通方法有什么区别? 问题 31. 什么是方法重载和方法重写?他们有什么区别?...在设计层次结构,我们通常会使用抽象类,而在定义一组相关行为时,我们通常会使用接口。 问题 30. 什么构造函数?它与普通方法有什么区别?...在实例方法或构造函数,this 通常用于引用当前对象变量或方法。成员变量与局部变量重名,我们可以使用 this 来区分它们。...此外,this 还可以用于在一个构造函数调用另一个构造函数super 关键字:super 是一个引用变量,它指向当前对象。我们可以使用 super 来访问父变量和方法。...子类需要调用构造函数或者需要访问父方法,我们可以使用 super。此外,如果子类重写了父方法,我们也可以通过 super调用原始方法。

26340

-1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态

super代表父内存空间标识。 子父出现同名成员,可以用super进行区分 子类要调用构造函数,可以使用super语句。...在子类覆盖方法,继续使用被覆盖方法可以通过super.函数名获取。 覆盖注意事项:   •覆盖,子类方法权限一定要大于等于父方法权限   •静态只能覆盖静态。...覆盖应用:   •子类需要父功能,而功能主体子类有自己特有内容,可以复写父方法,   这样,即沿袭了父功能,又定义了子类特有的内容。...子类实例化过程 子类中所有的构造函数默认都会访问父中空参数构造函数 因为每一个构造函数第一行都有一条默认语句super(); 子类具备父数据,所以要先明确父是如何对这些数据初始化。...没有空参数构造函数,子类构造函数必须通过this或者super语句指定要访问构造函数。 final关键字 final可以修饰,方法,变量。 final修饰不可以被继承

68110

Java基础总结大全(1)

构造方法 **子类实例化过程 ***子类创建对象先去创建父对象。 默认是去调用无参构造方法。...***子类构造方法,第一行默认是super() ***为什么子类第一行默认有super() 因为他继承成员使用,使用前这些成员必须初始化, 而他们是父成员,所以,必须通过父进行初始化...所以,先创建一个父对象。 **没有无参构造方法 必须使用this或者super调用其他构造方法。 (6)this和super区别 this:代表本类对象引用。...如果不能,为什么构造方法? 抽象类构造方法。 抽象类不能被实例化。 抽象类构造方法供子类实例化调用。...都有默认修饰 public abstract 构造方法:没有构造方法 C:抽象类定义继承体系共性功能。 接口中定义继承体系扩展功能。

1.1K110

面向对象基础知识学习总结笔记2019-8-26

子类构造方法默认调用构造方法使用关键字super()/super.属性名;默认在构造方法体第一行 及时每写默认也有,目的是为了初始化父相关属性。...多态存在三个必要条件: 1.继承 2.重写 3.父引用指向子类对象 Animal animal = new Cat(); 使用多态方式调用方法,首先检查父是否有该方法...多态实现方式: 方式一:重写 方式二:接口 方式三: 抽象类和抽象方法 多态引用时,构造子类对象构造方法调用顺序 1,先调用构造方法,多重超首先调用最远超方法...抽象类可以有抽象方法,也可以没有抽象方法. 抽象类拥有尽可能多共同代码。 什么时候使用抽象类?...抽象类作为一个抽象概念,它提供了一个继承触发点, 设计一个新抽象类,一定是用来继承。 所有在一个以继承关系行成等级结构里面。

23710

Java基础总结大全(1)

构造方法 **子类实例化过程 ***子类创建对象先去创建父对象。 默认是去调用无参构造方法。...***子类构造方法,第一行默认是super() ***为什么子类第一行默认有super() 因为他继承成员使用,使用前这些成员必须初始化, 而他们是父成员,所以,必须通过父进行初始化...所以,先创建一个父对象。 **没有无参构造方法 必须使用this或者super调用其他构造方法。 (6)this和super区别 this:代表本类对象引用。...如果不能,为什么构造方法? 抽象类构造方法。 抽象类不能被实例化。 抽象类构造方法供子类实例化调用。...都有默认修饰 public abstract 构造方法:没有构造方法 C:抽象类定义继承体系共性功能。 接口中定义继承体系扩展功能。

88450

JAVA 1-6章测试题

2>Super:如果父没有提供无参数构造方法,那么,我们必须通过super语句指导子类调用其他构造方法; 3>子类局部变量或成员变量与父成员变量同名,通过super访问父成员变量...; 4>子类方法重写了父方法并还需要调用中被重写方法,通过super访问父中被重写方法;5>super与this语句出现在构造方法必须放在构造方法第一行,并且不能同时出现;...答:构造方法不能被重写,但可以重载。因为构造方法不能被继承,而方法重写是发生继承关系下,所以构造方法不能被重写。 26、构造函数作用是什么?...答:1>final是不可改变意思,一个变量被定义为final型,它就成了一个常量且必须初始化; 2>一个被定义为final型,这个不能被继承; 3>一个方法被定义为final型,这个方法可以被继承...JVM某个线程调用一个方法,会为这个方法局部变量分配内存;JVM某个线程结束调用一个方法结束这个方法局部变量生命周期。

84030

JAVA基础(38) java四大特性理解(封装、继承、多态、抽象)

java支持多层继承要使用一个继承体系,1,查看该体系顶层,交接该体系基本功能。 3,创建体系最子类对象,完成功能使用。 什么时候定义继承?    ...子父成员变量同名super区分父。    ...this代表本类对象引用,super代表父一个空间  重写:    子父中出现相同方法先运行子类方法。...子父构造方法特点:    在子类构造对象,发现,访问子类构造函数,父也运行了。 原因:    在子类构造方法第一行有一个默认隐士语句。...super();调用空参数构造函数

2K20

一文读懂面向对象(OOP)

(a2.toString()); } } 注:子类继承继承属性和方法,那么就需要先调用构造器对父属性进行初始化,初始化后再给子类使用。...(例:肯定是先有爷爷再有爸爸最后有儿子) 创建子类,不管你使用子类哪个构造方法,默认情况下总会去调用无参构造函数super()),如果父没有提供无参构造函数,则必须在子类构造函数中用...调用构造器 (分工明确, 父类属性由父初始化,子类属性由子类初始化) 子类中有和父成员(属性和方法)重名,为了访问父成员,必须通过super。...重载 发生在同一个 可能有多个同名方法,包括构造方法,它们有相同方法名,但是却有不同参数,这时就会根据函数参数传递参数类型进行匹配,选择适合相同参数类型方法。...对于构造方法,仅当当前没有其它有参构造函数才会得到一个默认无参构造器,但是只要有一个有参构造函数,但是却没自定义一个无参构造器的话就必须给定有参初始值。

71720
领券