Java 中的方法重写

news/2024/12/12 0:52:28/

在 Java 中,方法重写(Method Overriding)是面向对象编程的一个重要概念,它指的是子类中存在一个与父类中相同名称、相同参数列表和相同返回类型的方法。方法重写使得子类可以提供特定的实现,从而覆盖(或改变)父类中已有的方法行为。

### 方法重写的基本规则:

1. **方法签名**:
   - 子类重写的方法必须具有与父类中被重写的方法相同的方法名、参数列表(参数类型和参数个数)以及返回类型。

2. **访问权限**:
   - 子类中重写的方法不能拥有比父类中被重写的方法更严格的访问权限。

3. **返回类型**:
   - 子类重写的方法返回类型必须与父类中被重写的方法返回类型相同,或者是其子类型(协变返回类型)。

4. **异常**:
   - 子类重写的方法抛出的异常不能比父类中被重写的方法声明的异常更宽泛。

5. **构造器**:
   - 构造器不能被重写,因为构造器的名称与类名相同,而子类不能与父类有相同的名称。

6. **静态方法**:
   - 静态方法不能被重写,但可以被隐藏(静态方法的隐藏是指子类中的静态方法与父类的静态方法具有相同的名称和参数列表)。

### 方法重写的例子:

```java
class Animal {public void makeSound() {System.out.println("Some sound");}
}class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Bark");}
}public class Test {public static void main(String[] args) {Animal myDog = new Dog();myDog.makeSound(); // 输出 "Bark"}
}
```

在这个例子中,`Dog` 类重写了 `Animal` 类中的 `makeSound` 方法。当我们创建 `Dog` 类的实例并通过 `Animal` 类的引用调用 `makeSound` 方法时,实际调用的是 `Dog` 类中重写的方法。

### 使用 `@Override` 注解:

- Java 提供了 `@Override` 注解,用于明确表示一个方法是重写了父类的方法。如果方法没有正确地重写父类的方法,编译器会报错。

### 方法重写的目的:

- 方法重写的主要目的是为了实现多态性(Polymorphism),允许通过父类的引用调用子类的方法,从而使得同一个方法调用具有不同的行为。
- 它还允许子类根据需要改变父类方法的行为,以适应特定的实现需求。

方法重写是 Java 中实现多态性的关键机制之一,它使得代码更加灵活和可扩展。
 


http://www.ppmy.cn/news/1554359.html

相关文章

等保2.0数据库测评之SQL server数据库测评

一、SQL server数据库介绍 SQL server美国Microsoft公司推出的一种关系型数据库系统。SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统。 本次安装环境为Windows10专业版操作系统,数据库版本为Microsoft SQL Server 2019 (…

算法学习之贪心算法

前言 记录一下,免得又又忘了 贪心算法 在刚接触的时候,我一直觉得贪心和动态规划有相似之处,但做过的题目看,贪心似乎不用迭代

基于协同过滤的图书推荐系统 爬虫分析可视化【源码+文档】

【1】系统介绍 研究背景 随着互联网的普及和电子商务的发展,用户可以在线获取大量的图书资源。然而,面对海量的信息,用户往往难以找到自己真正感兴趣的书籍。同时,对于在线书店或图书馆等提供图书服务的平台来说,如何…

selenium学习:等待方式

隐式等待 1.针对查找元素设置最大的超时时间 2.可以全局性的设置 3.不满足时,提示no such element driver.implicitly_wait(5) #对查找元素最大的超时时间,如果超过最大等待时间后,没有找到元素,则会报错:no such #e…

Android UI:ViewTree:源码分析:事件处理:显示事件

文章目录 概述测量:measure和onMeasure​​​​​​​ View.MeasureSpecViewViewGroupLinearLayoutRelativeLayout布局:layout和onLayout ViewViewGroupLinearLayoutRelativeLayout绘制:dispatchDraw、draw和onDraw ViewViewGroupLinearLayoutRelativeLayout总结概述 显示事…

K8S命令部署后端(流水线全自动化部署)

前言 本文为链接: 云效流水线k8s半自动部署java(保姆级)的补充,本文起初的目的是为了补充完善k8s流水线的全自动化部署,但是也适用于k8s的一键重启,因为使用k8s的web页面容易出现漏点的情况,因此也可以把代码保存为shell脚本,同样可以实现一键重启。关于…

页面置换算法模拟 最近最久未使用(LRU)算法

最近最久未使用(LRU)算法是一种基于页面访问历史的页面置换算法。它选择最久未使用的页面进行置换。当需要访问一个不在内存中的页面时,如果内存已满,则选择最久未使用的页面进行置换。LRU算法通过记录页面的访问时间戳来判断页面…

wlanapi.dll丢失怎么办?有没有什么靠谱的修复wlanapi.dll方法

在遇到各种系统文件错误当中,其中之一就是“wlanapi.dll文件丢失”的问题。这种问题通常发生在Windows操作系统上,特别是当系统试图执行与无线网络相关的任务时。wlanapi.dll是一个重要的系统文件,它负责处理Windows无线网络服务的许多功能。…