Class类-super关键字

ops/2024/10/16 4:29:44/

在编程中,super关键字通常用于引用父类(超类)的属性或方法。以下是在不同语言中super关键字的使用示例:

JavaScript (ES6 Class Syntax)

Javascript
1class Parent {
2    display() {
3        console.log("Parent class");
4    }
5}
6
7class Child extends Parent {
8    display() {
9        super.display(); // 调用父类的display方法
10        console.log("Child class");
11    }
12}
13
14let child = new Child();
15child.display();

此处super.display()同样用于调用父类Parent的display方法。

super关键字在访问或修改状态(如成员变量)时,也可以发挥作用。例如,在Java和JavaScript中:

Java
1class Parent {
2    protected String name = "Parent";
3
4    public void showName() {
5        System.out.println("Name in Parent: " + name);
6    }
7}
8
9class Child extends Parent {
10    private String name = "Child";
11
12    public void showAllNames() {
13        System.out.println("Name in Child: " + this.name); // Accessing own state
14        System.out.println("Name in Parent (using super): " + super.name); // Accessing parent's state
15    }
16}
17
18public class Main {
19    public static void main(String[] args) {
20        Child child = new Child();
21        child.showAllNames();
22    }
23}

在这个例子中,super.name用于访问父类Parent的状态(成员变量)。

JavaScript

Javascript
1class Parent {
2    constructor() {
3        this.name = "Parent";
4    }
5
6    showName() {
7        console.log("Name in Parent: " + this.name);
8    }
9}
10
11class Child extends Parent {
12    constructor() {
13        super();
14        this.name = "Child";
15    }
16
17    showAllNames() {
18        console.log("Name in Child: " + this.name);
19        console.log("Name in Parent (accessing via super): " + super.name);
20    }
21}
22
23let child = new Child();
24child.showAllNames();

在这段JavaScript代码中,super.name同样用于访问父类Parent的状态(成员变量)。请注意,在构造函数中通过super()调用父类的构造函数来初始化父类的状态。

可以向super传参吗

确实可以在某些编程语言中向super传递参数,尤其是当涉及类的构造函数以及继承链中的方法重写时。以下是两种支持这种功能的语言示例:

Python
在Python中,当你在子类的构造函数(即__init__方法)中使用super()时,可以向父类传递参数:

class Parent:def __init__(self, name, age):self.name = nameself.age = agedef say_hello(self):print(f"Hello, I am {self.name}.")class Child(Parent):def __init__(self, name, age, grade):super().__init__(name, age)  # 向父类传递参数self.grade = gradedef introduce(self):super().say_hello()  # 调用父类方法print(f"I am in grade {self.grade}.")child = Child("Alice", 10, 5)
child.introduce()

在这个例子中,super().__init__(name, age)将子类Child的构造函数中接收到的参数传递给了父类Parent的构造函数。

JavaScript (ES6 Classes)
在JavaScript中,你也可以在子类构造函数中通过super关键字传递参数给父类构造函数:

class Parent {constructor(name, age) {this.name = name;this.age = age;}sayHello() {console.log(`Hello, I am ${this.name}.`);}
}class Child extends Parent {constructor(name, age, grade) {super(name, age);  // 向父类传递参数this.grade = grade;}introduce() {super.sayHello();  // 调用父类方法console.log(`I am in grade ${this.grade}.`);}
}let child = new Child("Alice", 10, 5);
child.introduce();

在JavaScript的例子中,super(name, age)将子类Child构造函数接收的参数传递给了父类Parent的构造函数。


http://www.ppmy.cn/ops/42286.html

相关文章

深度学习之基于Yolov3的行人重识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 行人重识别(Person Re-Identification,简称ReID)是计算机视觉领域…

Java日期Date和LocalDateTime的工具类

Date package com.qiangesoft.utils.date;import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;/*** 日期工具类** author lq* date 2024-05-23*/ public class DateUtil {public static final String[] CHINESE_WEEK_DAY new String[]{&q…

循环队列的实现

循环队列的意思就是用限定的内存空间来完成队列相关操作。在结构上是循环的,在物理上可以是链表或者是数组 那么我们首先从数组来实现循环队列: 数组型 数组的内存不是环形的,所以我们需要用到%来实现下标的循环。 那么循环队列里面最重要…

如何在go项目中实现发送邮箱验证码、邮箱+验证码登录

前期准备 GoLand :2024.1.1 下载官网:https://www.jetbrains.com/zh-cn/go/download/other.html Postman: 下载官网:https://www.postman.com/downloads/ 效果图(使用Postman) Google: QQ: And …

sql server使用 SELECT INTO 进行数据表备份和创建临时中间表

在数据库操作中,常常需要将数据从一个表复制到另一个表,或将部分数据保存到一个新的表中进行进一步操作。SELECT INTO 是一个强大的 SQL 语句,可以在 SQL Server 和部分其他数据库系统中实现这一功能。本文将讨论如何使用 SELECT INTO 进行数…

卷积神经网络(CNN)详细介绍及其原理详解

卷积神经网络(Convolutional Neural Networks,简称CNN)是深度学习中非常重要的一类神经网络,主要用于图像识别、图像分类、物体检测等计算机视觉任务。本文将详细介绍卷积神经网络的基本概念、结构组成及其工作原理,并…

深度学习之基于Tensorflow的卷积神经网络手写数字识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 手写数字识别是计算机视觉和模式识别领域的一个重要问题。传统的识别方法往往依赖于复杂的特征工程和…

溪谷联运SDK功能全面解析

近期,备受用户关注的手游联运10.0.0版本上线了,不少用户也选择了版本更新,其中也再次迎来了SDK的更新。溪谷软件和大家一起盘点一下溪谷SDK的功能都有哪些吧。 一、溪谷SDK具有完整的运营功能和高度扩展性 1.登录:登录是SDK最基础…