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

java基础-方法的重写、super关键字

1.定义:子类可以根据需要改写从父类那继承来的方法,执行时,子类的方法会覆盖父类的方法

2.要求:

(1)子类和父类的方法必须同名,同参数列表

(2)父类中private修饰的方法不能被重写

(3)子类中的返回值类型不能大于父类:

细节:

父类的方法为void,子类必须是void;

父类方法的返回值类型是A类型,子类的返回值类型可以是A类或A类的子类

父类方法返回值为基本数据类型,子类方法必须是相同的基本数据类型;

(4)子类中方法的权限修饰符不能小于父类的

(5)子类方法抛出的异常不能大于父类被重写方法的异常

(6)父类中声明为static的方法,在子类中改写不叫重写

3.

(1)super可以用来调用:属性、方法、构造器

(2)super的使用:我们在子类的方法或构造器中,通过使用super.的方式调用父类中的结构,但通常情况下省略super;但是当父子类中定义了同名的属性时,我们要在子类中调用父类中的属性,就要使用super方法;

(3)super调用构造器

我们可以在子类的构造器中使用super(形参列表)的方式,调用父类中声明的制定构造器,必须写在构造器的首行,你不写的话就默认用super()空参构造器,也就是说,你子类中只要有构造器,那肯定会调用其他构造器,可能是this(),可能是super();

(4)子类对象实例化过程:

我们创建一个dog对象,但会自动调用其父类的构造方法,使之属性在堆中加载,此时dog才能调用父类的一些结构

从结果上看:创建子类的对象,在堆空间中,就会加载所有父类中声明的属性;

从过程上看,通过子类的构造器创建子类对象时,一定会直接或间接的调用父类的构造器,直到调用了java.lang.Object类中空参的构造器为止;

明确:虽然加载了父类的属性,但是从始至终我们只创建了一个对象

4.子类继承父类private属性的一些理解:

public class Account {private int id;private double balance;private double annualInterestRate;public Account(int id, double balance, double annualInterestRate){this.id = id;this.balance = balance;this.annualInterestRate = annualInterestRate;}public int getId() {return id;}public void setId(int id) {this.id = id;}public double getBalance() {return balance;}public void setBalance(double balance) {this.balance = balance;}public double getAnnualInterestRate() {return annualInterestRate;}public void setAnnualInterestRate(double annualInterestRate) {this.annualInterestRate = annualInterestRate;}public void withDraw(double amount){if(amount <= this.balance){this.balance -= amount;}else {System.out.println("取款失败");}}public void despoit(double amount){this.balance += amount;}
}
public class CheckAccount extends Account {private double overdraft;public CheckAccount(int id, double balance, double annualInterestRate){super(id, balance, annualInterestRate);}
}
import org.w3c.dom.ls.LSOutput;import java.util.Arrays;public class Main {public static void main(String[] args) {CheckAccount c1 = new CheckAccount(1001, 5000, 0.123);System.out.println(c1.getId());}}在这串代码中,子类调用了父类的构造器,并初始化了父类的属性,初始化完成后,再初始化子类自己的属性,最终传入的值是赋给了创建的子类对象的继承的属性,

注意:子类其实继承了父类的私有属性,但是不能直接用子类对象进行操作,只能使用从父类继承来的公共方法来操作子类的属性;

子类对象的内存结构包含父类的所有属性(即使是私有属性)。必须先初始化父类部分,才能保证对象状态的一致性。

http://www.xdnf.cn/news/430111.html

相关文章:

  • NVMe学习资料汇总
  • 浅析AI大模型为何需要向量数据库?从记忆存储到认知进化
  • AI Agent开发第65课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent(下)
  • 2025年,大模型LLM还有哪些可研究的方向?
  • Mac上安装Mysql的详细步骤及配置
  • Python核心数据类型全解析:字符串、列表、元组、字典与集合
  • 在C#中使用YOLO的几种方式
  • 代码仓提交分支规范
  • docker安装mysql8, 字符集,SQL大小写规范,sql_mode
  • G1JVM内存分配机制详解
  • 华秋2025电子设计与制造技术研讨会(华东站)成功举办!
  • 合合信息上线智能文档处理领域首批MCP服务,助力企业快速搭建Agent
  • paimon中批和流查看过去的快照的数据及变动的数据
  • #S4U2SELF#S4U2Proxy#CVE-2021-42278/42287以及手动复现
  • 脑机接口技术:开启人类与机器融合的新时代
  • 《从像素到身份:Flutter如何打通社交应用人脸识别的技术闭环》
  • 本地缓存的三种实现
  • 检索增强生成(RAG)简介
  • Codeforces Round 998 (Div. 3)
  • STM32F103_LL库+寄存器学习笔记22 - 基础定时器TIM实现1ms周期回调
  • 深入浅出:C++数据处理类与计算机网络的巧妙类比
  • Oracle OCP认证考试考点详解083系列15
  • CVE-2016-4977 漏洞深度分析
  • TensorFlow之微分求导
  • 力扣-101.对称二叉树
  • JIT+Opcache如何配置才能达到性能最优
  • Spring Boot 自动装配原理详解
  • openGauss与海量100数据库对比
  • vscode点击函数名/变量/文件名无法跳转
  • 项目图标组件处理