当前位置: 首页 > news >正文

掌握Java中的super关键字

super 是 Java 中的一个关键字,它在继承的上下文中特别有用。super 引用了当前对象的直接父类,它可以用来访问父类中的属性、方法和构造函数。以下是 super 的几个主要用途:

1. 调用父类的构造函数

在子类的构造函数中,你可以使用 super 来调用父类的构造函数。这通常在子类构造函数的第一行完成,以确保父类的属性被正确初始化。

class Parent {Parent(String name) {System.out.println("Parent constructor called with name: " + name);}
}class Child extends Parent {Child(String name, int age) {super(name); // 调用父类的构造函数System.out.println("Child constructor called with age: " + age);}
}public class Main {public static void main(String[] args) {Child child = new Child("Alice", 10);}
}

在这个例子中,Child 类的构造函数通过 super(name) 调用了 Parent 类的构造函数,并传递了一个 name 参数。

2. 访问父类的成员

在子类中,如果你想要引用父类的属性或方法,可以使用 super 关键字。

class Parent {String name = "Parent";void printName() {System.out.println("Name in Parent: " + name);}
}class Child extends Parent {String name = "Child";void printName() {super.printName(); // 调用父类的printName方法}
}public class Main {public static void main(String[] args) {Child child = new Child();child.printName(); // 输出 "Name in Parent: Parent"}
}

在这个例子中,尽管 Child 类有自己的 name 属性和 printName 方法,但它通过 super.printName() 调用了父类的 printName 方法来打印父类的 name 属性。

3. 方法重写

当你在子类中重写父类的方法时,可以使用 super 来调用父类的方法。

class Parent {void doSomething() {System.out.println("Doing something in Parent class");}
}class Child extends Parent {@Overridevoid doSomething() {super.doSomething(); // 调用父类的doSomething方法System.out.println("Doing something more in Child class");}
}public class Main {public static void main(String[] args) {Child child = new Child();child.doSomething(); // 首先调用父类的方法,然后调用子类的方法}
}

在这个例子中,Child 类重写了 doSomething 方法,并在方法内部首先调用了父类的 doSomething 方法。

4. 阻止继承

使用 super 关键字结合 Object 类的构造函数可以阻止其他类继承某个类。

class FinalClass extends Object {public FinalClass() {super(); // 调用Object类的构造函数}
}final class TrulyFinalClass {// 这个类不能被继承,因为它没有构造函数,且Object类是final的
}

在这个例子中,FinalClass 可以被继承,因为它有一个可访问的构造函数。而 TrulyFinalClass 不能被继承,因为 Object 类是 final 的,且没有提供其他构造函数。


super注意点:

1.super调用父类的构造方法,必须在构造方法的第一个;
2. super必须只能出现在子类的方法或者构造方法中;
3. super和this不能同时调用构造方法。

VS this:

  代表的对象不同:this:本身调用这个对象super: 代表父类对象的应用前提:this:没有继承也可以使用super:只能在继承条件下才可以使用构造方法:this();本类的构造super();父类的构造

总结

super 是 Java 中一个非常有用的关键字,它在继承结构中提供了一种访问父类成员的方式。正确使用 super 可以帮助你更好地组织代码,实现父类和子类之间的清晰分离和协作。

http://www.lryc.cn/news/327113.html

相关文章:

  • STM32之HAL开发——系统定时器(SysTick)
  • Redis 不再“开源”:中国面临的挑战与策略应对
  • 刚刚,百度和苹果宣布联名
  • HTTP系列之HTTP缓存 —— 强缓存和协商缓存
  • 代码+视频,R语言logistic回归交互项(交互作用)的可视化分析
  • 实验3 中文分词
  • ReentrantLock 原理
  • 星云小窝项目1.0——项目介绍(一)
  • VR虚拟仿真在线模拟旅游专业情景
  • ROS 2边学边练(3)-- 何为节点(nodes)
  • MySQL的主从复制和读写分离
  • C# 多态 派生类 abstract virtual new
  • 【爬虫基础】第10讲 urlerror的使用及捕获异常
  • 绍兴越城中墙建材蒸压加气混凝土砌块使用注意事项可送塔山府山北海蕺山城南稽山迪荡灵芝东湖皋埠马山斗门鉴湖东浦孙端陶堰富盛
  • 吴渔夫:AI技术引领游戏产业革命,小团队有大作为
  • 深入探索C++对象模型(二)
  • 【javaWeb 第三篇】Vue快速入门
  • 非root用户安装git lfs(git大文件)命令记录
  • PTA 道路管制
  • 自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】
  • 【WPF应用7】 基本控件-Grid 布局的详解与示例
  • flink-connector-redis支持select查询
  • [密码学] 密码学基础
  • 上海:6月1日起取消企业复工复产白名单制
  • SpringBoot扩展篇:循环依赖源码链路
  • 服务消费微服务
  • uni-app纵向步骤条
  • 【JavaEE -- 文件操作IO有关面试题】
  • Open WebUI大模型对话平台-适配Ollama
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决