super方法

 1 # @Time     :2019/6/22 18:43
 2 # -*- encoding:utf-8 -*-
 3 '''
 4 class Base(object):
 5     def f1(self):
 6         print("Base")
 7         super().f1()
 8 class Bar():
 9     def f1(self):
10         print("Bar")
11 
12 class Foo(Base, Bar):
13     def f2(self):
14         print("Foo")
15         super().f1()
16 
17 foo = Foo()
18 foo.f2()
19 '''
20 # super方法,按照当前类的继承顺序,Foo -> Base -> Bar 找下一个,即:
21 # 第一个super方法现在在Foo类中,按照当前类的继承顺序Foo -> Base -> Bar 找下一个
22 #就是到Base类中找f1方法,
23 #同理:第二个super方法是在Base类中,会去Bar类找f1方法
24 
25 #例题:
26 class Base(object):
27     def f1(self):
28         print("Base")
29 
30 
31 class Bar(Base):
32     def f1(self):
33         super().f1() #按照当前类的继承顺序找下一个,执行print("Base")后,继续往下面执行(参考Debug,更容易理解执行顺序)
34         print("Bar")
35 
36 obj = Bar()
37 obj.f1()

 

转载于:https://www.cnblogs.com/Demo-simple/p/11139958.html

在 Java 中,`super` 关键字主要用于在子类中访问父类的成员,包括方法、属性和构造方法。 ### 使用场景 - **访问父类的方法和属性**:当子类继承父类的非私有的方法和成员变量,且子类中没有与父类同名的方法和变量时,可直接通过名称使用父类的方法和变量;若子类存在与父类同名的方法和成员变量,要区别访问父类和自身的变量和方法,需使用 `super` 关键字调用父类的方法和属性 [^1][^2]。 示例代码如下: ```java class Parent { int value = 10; void display() { System.out.println("Parent's display method"); } } class Child extends Parent { int value = 20; @Override void display() { super.display(); // 调用父类的 display 方法 System.out.println("Child's display method"); } void printValues() { System.out.println("Parent's value: " + super.value); // 访问父类的 value 属性 System.out.println("Child's value: " + this.value); } } public class Main { public static void main(String[] args) { Child child = new Child(); child.display(); child.printValues(); } } ``` - **调用父类的构造方法**:在子类的构造方法中,可以使用 `super()` 调用父类的构造方法。如果子类的构造方法中没有显式调用父类的构造方法,Java 编译器会自动在子类构造方法的第一行插入 `super()` 调用父类的无参构造方法。若父类没有无参构造方法,子类构造方法中必须显式调用父类的有参构造方法,否则会出现编译错误 [^4]。 示例代码如下: ```java class Parent { String name; Parent(String name) { this.name = name; } } class Child extends Parent { Child(String name) { super(name); // 调用父类的有参构造方法 } } ``` ### 原理 `super` 关键字的底层原理靠 `INVOKESPECIAL` 指令实现。`invokespecial` 指令主要用于调用一些需要特殊处理的实例方法,包括实例初始化方法、私有方法和父类方法 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值