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

在父类本身中使用了'super()‘,为什么?

在父类本身中使用'super()'是为了调用父类的构造函数。在面向对象编程中,子类继承了父类的属性和方法,但是子类也可以有自己的属性和方法。当子类需要初始化自己的属性时,通常需要先调用父类的构造函数来完成父类属性的初始化工作。

使用'super()'可以确保在子类中调用父类的构造函数,从而完成父类属性的初始化。这样可以避免重复编写相同的初始化代码,提高代码的复用性和可维护性。

'super()'的使用还可以保证在多层继承关系中,父类的构造函数按照正确的顺序被调用。这样可以确保父类的属性被正确地初始化,避免潜在的错误和逻辑混乱。

在使用'super()'时,需要注意的是,如果子类定义了自己的构造函数,则必须在构造函数中显式地调用'super()',否则父类的构造函数不会被执行。如果子类没有定义构造函数,则会自动调用父类的构造函数。

总之,使用'super()'可以确保子类在初始化自己的属性时,正确地调用父类的构造函数,保证继承关系的正确性和代码的可维护性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Python】面向对象 - 继承 ② ( 子类重写成员 | 子类调用重名成员 | 子类中使名 调用成员 | 子类中使super 调用成员 )

- 子类重写成员 Animal 中 , 定义了 成员属性 name 和 age , 成员方法 make_sound 函数 ; 子类 Dog 中 , 对 Animal 的 成员属性 name...1、子类调用重名成员语法 外部 是无法访问 成员 : 子类 重写 成员后 , 通过 子类 实例对象 调用 该 重写后的 成员时 , 默认调用的就是 重写后的成员 ; 子类内部 可以...: 名.成员方法名(self) 方法二 : 使用 super 调用成员 ; 调用类同名成员变量 : super().成员变量名 调用类同名成员方法 : super().成员方法名(...) 2、代码示例 - 子类中使名 调用成员 Dog 子类中的 make_sound 函数中 , 通过 Animal.name 和 Animal.age 可以调用的成员变量 , 打印出来的值为的成员变量值...super 调用成员 Dog 子类中的 make_sound 函数中 , 通过 super().name 和 super().age 可以调用的成员变量 , 打印出来的值为的成员变量值

51230

为什么不能在init和dealloc函数中使用accessor方法

有一个value属性(子类自然也会集成该属性)。如果在的init(或其他初始化构造方法)中使用了value的setter,子类也重写了value的setter,那么就会出现问题。...原因如下:子类调用init(或其他初始化构造方法)初始化对象时候,子类的init会首先调用的init(self = [super init]),这样就会调到的init方法里,而我们的init...案例二 如果在的init方法中使用了value的setter,同时也写了setter。...当子类初始化时会先调用的init方法,即self = [super init],由于中使用了value的setter,那么的init又会调到value的setter,如果setter中做了其他的操作...为什么不能在dealloc中调用accessor 还是基于子类重写了的value属性这一前提,子类对象销毁时,首先调用子类的dealloc,最后调用的dealloc(这与init初始化方法是相反的

9.1K40
  • 第七章 面向对象编程(进阶)

    推论:如果一个中声明了 n 个构造器,则最多有 n - 1 个构造器中使用了"this(形参列表)" this()和 this(实参列表)只能声明构造器首行。...因为 static 方法是属于的,子类无法覆盖的方法。 ‍ 3.2 为什么需要方法的重写? ‍ 子类继承以后,就获取了中声明的所有的方法。...关键字 supersuper 的理解:的 ‍ Java 中使super 来调用中的指定操作: super 可用于访问中定义的属性 super 可用于调用中定义的成员方法...,this 代表本类对象的引用,super 代表的内存空间的标识 4.1 为什么需要 super? ‍...⑥ 由 ⑤ 得到:一个中声明有 n 个构造器,最多有 n-1 个构造器中使用了"this(形参列表)", 则剩下的那个一定使用"super(形参列表)"。 ‍

    14710

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

    1 为什么调用子类的构造方法的时候,默认会调用的构造方法 看下面这个简单的例子: package cc; public class Sub extends Super { public Sub...这就是为什么我们上面的那个例子程序会先调用super的构造方法。 但要切记,** 虽然调用了的构造方法,但只创建了一个对象也就是子对象。...解决这个问题很简单,我们可以给插入一个无参的构造函数,或者子类构造函数中显示的调用的有参构造函数。 子类的构造函数中显示的调用的构造函数 下面的代码是正确的。 ?...Paste_Image.png 构造函数的使用规则 简单的说,使用的时候,子类的构造函数必须调用的构造函数,不管有没有显示的声明。所以,被调用的构造函数,一定在定义好!...为什么Java一个已经实现了一个带参的构造函数的时候,不实现默认的无参构造函数? 这是个很有趣的问题。

    2.8K41

    Python多继承、super与MRO算法

    子类中通过super访问中的成员 现在先说第一种方法。...图1 B中,通过A. __init__(self)和A.greet(self,'Bill')调用了(A)的成员。Python2.2之前,Python只支持这种访问成员的方式。...B中并没有直接使用A的名字,而是使用了super。如果A的名字变化了,只需要修改B即可,并不需要修改B内部的代码,这样将大大减少维护B的工作量。...可能有的同学会问,super的第2个参数的值为什么是self呢?我们都知道,Python中,self表示本身的实例,那么为什么不是B()或是A()呢?...__init__() print('End A') A() 在这段代码中,X1和X2都是A的,而在A的构造方法中使super(A,self).

    51010

    Python - 面向对象编程 - super()

    super() 当子类重写了方法时,又想调用的同名方法时,就需要用到 super() 什么是 super Python 中,super 是一个特殊的 super() 就是使用 super...创建出来的对象 实际应用的场景:子类重写方法时,调用方法 单继承中使super 实例方法使用 super 图 实际代码 class A: def __init__(self...BBB [self.n] is 100 AAA [self] is 4489158560 AAA [self.n] is 100 104 的确调用了方法 super().add() 重点... Python 2.x 的时候,如果需要调用的方法,还可以用 名.方法(self) 这种方式,Python 3.x 还是支持的 不过不推荐,因为名发生变化的话,方法调用位置的名也要同步修改...,是需要传 self 参数的哦 温馨提示 开发时, 名.方法() , super().方法() 两种方式不要混用哈 灵魂拷问一:既然已经重写了子类的构造方法,为什么还要去调用 super

    31220

    super(props) 真的那么重要吗?

    接下来我们试一试: ---- JavaScript 中,super 指的是的构造函数。(我们的示例中,它指向React.Component的实现。)...重要的是,调用构造函数之前,你不能在构造函数中使用this。 JavaScript 是不会让你这样做的: ?...为什么 JavaScript 在你使用 this 之前要先强制执行构造函数,有一个很好的理由能够解释。 先看下面这个的层次结构: ?...但是我们忘记了 super() 设置 this.name 之前先调用了 this.greetColleagues()。 所以此时 this.name 还没有定义!...为了避免这类陷阱,JavaScript 强制要求:如果想在构造函数中使用this,你必须首先调用super。 先让做完自己的事! 这种限制同样也适用于被定义为的 React 组件: ?

    1.3K50

    Python - 面向对象编程 - 使用 super() 的一些注意事项

    super() 详解 https://www.cnblogs.com/poloyy/p/15223443.html 多继承中使super() class A: def test(self):...) # 输出结果 CCC AAA BBB 通过 名.方法名() 即可,但这样和 super() 混用,不是一个好编码习惯,具体看下面 混用super() 和 显示调用 class A:...__mro__]) C() # 输出结果 MRO: ['C', 'A', 'B', 'object'] C A B B B 的 __init__() 方法被调用了两次 为什么呢?...__init__() 显式的调用了一次 从 MRO 可以看到,A 后面跟的是 B ,所以 A super() 会调用 B 一共调用了两次 如何避免 多继承场景中,super() 的使用必须一致...坚决不混用 继承时应该查看的层次结构,就是使用的 属性,或者 mro() 方法查看相关的 MRO __mro__

    31320

    详解 Java 泛型

    这其实就是我们常听到的泛型擦除:泛型还没被使用到时中并不知道字段的实际的类型是什么,于是用了一个所有的基:java.lang.Object 类型的引用来承接实际值。...super A> list,即为 A 或者 A 的类型。...请注意:我们 super 小节定义的容器中接收对象的引用类型确实是不确定的,但是我们 定义了这个引用类型的下界,即这个用来接收对象的引用类型只能是 A 或者 A 的 ,那么用这个引用类型来接收 A...此时就需要看有没有配合 super 或者 extends 关键字使用了。...2、super 关键字用来规定接收引用类型的下界,下界一旦确定,可以接收的对象的类型也确定了(下界类型本身或者下界类型的对象)。get 方法可以返回的对象引用类型只能是 Object 类型。

    91220

    Java This和Super的用法

    首先说下This和Super的用法吧。 This this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。 1、普通的直接引用 this相当于是指向当前对象本身。...(见下面Super 引用构造函数) Super super可以理解为是指向自己超(对象的一个指针,而这个超指的是离自己最近的一个。...2、子类中的成员变量或方法与中的成员变量或方法同名,用super来区分 ? 运行结果: Shanghai China 可以看到,这里既调用了的方法,也调用了的变量。...super()和this()类似,区别是,super()从子类中调用的构造方法,this()同一内调用其它方法。 super()和this()均需放在构造方法内第一行。...this()和super()都指的是对象,所以,均不可以static环境中使用。包括:static变量,static方法,static语句块。

    86240

    python之子类继承时进行初始化的一些问题

    这是为什么呢? __init__相当于是python的构造方法,进行实例化时被调用,当子类和中都存在构造方法时,子类中需要显示调用的构造方法 。...super(Student, self).__init__():其中super关键字表示,Student是本类的名称,self指代本类自己。 python中如何设置私有属性和方法?...加上了私有的属性和方法不能在外进行访问,同时,子类继承的属性和方法时,子类中也不能够访问的私有属性和方法。...print("子类中使的共有属性:",self.age) #super()代表,可以访问的公有方法 #当然如若子类没有重写的方法,也可以使用self.test...()来调用 #super和self区别:super是指代父,self指代该类本身 super().test() #对于的私有属性和方法,需要通过_

    61950

    Java关键字 `super` 的骚操作

    调用构造方法 2. 访问类属性和方法 3. 创建引用 4. 接口中使super 5. Lambda 表达式中使super 6....,super() 调用了 Parent 的构造方法,确保创建 Child 对象时会执行的初始化。...System.out.println(super.name); // 访问类属性 } } Child 的 printInfo 方法中,使用 super.printInfo() 明确调用了的... Lambda 表达式中使super Lambda 表达式通常用于实现函数式接口。 Lambda 表达式中,super 关键字可以用于引用的成员或调用的方法。...的 performAction 方法中,使用 super.performAction() 调用了的异常处理代码,然后 catch 块中处理子类特定的异常情况。

    14110

    我妹说,只用讲 this,不用讲 super

    “我们可以一个中使用 this 关键字来调用另外一个方法,如果没有使用的话,编译器会自动帮我们加上。”...hello 10 “真的啊,无参构造方法也被调用了,所以程序输出了 hello。”三妹看到输出结果后不假思索地说。 “也可以无参构造方法中使用 this() 并传递参数来调用有参构造方法。”...黑色 白色 “当子类和的方法名相同时,可以使用 super 关键字来调用的方法。换句话说,super 关键字可以用于方法重写时访问到的方法。”... Animal 和子类 Dog 中都有一个名为 eat() 的方法,通过 super.eat() 可以访问到的 eat() 方法。” 等三妹自我消化的时候,我键盘上又敲完了一串代码。...动物来了 狗狗来了 “当然了,默认情况下,super() 是可以省略的,编译器会主动去调用的构造方法。

    34910

    TypeScript防脱发级入门——TS中的

    所以输出: 你好,我叫仵法医 2.3 super关键字 当我们需要在子类中调用的方法时,可以使用super关键字 举个例子:super关键字 export class Person { name...关键字调用函数sayHello的时候,super和this的效果是一样的,但它是有一个前提的,就是子类没有重写sayHello函数的前提下是一样的,只有子类重写函数的时候,super和this...抽象 3.1 为什么需要抽象 抽象(abstract)JS中是没有的,它是TS提出来的,有时候,某个只表示抽象的概念,主要用于提取子类共有的成员,而不能直接创建它的对象,这时该类可以作为抽象...,可能知道有些成员是必须要存在的,比如说一个人的名字,每个人都有名字,但是我们没有办法中直接书写具体叫什么名,只能在子类对象中才能清楚知道,因此,需要一种强约束,让继承该的子类必须实现该成员...ts中,如果某个中使用了两种类型的索引器,要求两种索引器的值类型必须匹配 最后 很感谢小伙伴看到最后,如果您觉得这篇文章有帮助到您的的话不妨关注➕+点赞+收藏+评论,您的支持就是我更新的最大动力。

    53220

    JAVA面试必备知识(基础篇)

    )有两个子类: Wind 和 Percussion,它们都覆盖了的 play() 方法,并且 main() 方法中使 Instrument 来引用 Wind 和 Percussion 对象。...为什么重写 equals 方法的时候需要重写 hashCode 方法?...有可能,两个不相等的对象可能会有相同的 hashcode 值,这就是为什么 hashmap 中会有冲突。...调用super()必须写在子类构造方法的第一行, 否则编译不通过super从子类调用构造, this同一中调用其他构造均需要放在第一行尽管可以用this调用一个构造器, 却不能调用2个this和...super不能出现在同一个构造器中, 否则编译不通过this()、super()都指的对象,不可以static环境中使用本质this指向本对象的指针。

    65830

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券