讲一下重写重载和继承分别是什么?
1 个回答
风雪映佳人,娇容绝红尘。叶泠泠## 1. 继承(Inheritance) **定义** * 一个类**复用另一个类的属性和方法**,形成父类(superclass)和子类(subclass)的关系。 * 用 `extends`(类)或 `implements`(接口)实现。 **特点** * 子类自动拥有父类的非私有属性和方法。 * 支持方法重写(Override)。 * Java **单继承**(一个类只能有一个直接父类),但可多实现接口。 **示例** ```java class Animal { void eat() { System.out.println("动物吃东西"); } } class Dog extends Animal { void bark() { System.out.println("汪汪"); } } Dog dog = new Dog(); dog.eat(); // 继承自 Animal dog.bark(); // 自己的 ``` ## 2. 重载(Overload) **定义** * **同一个类**中,方法名相同,**参数列表不同**(参数个数、类型、顺序不同),与返回值无关。 * 属于**编译时多态**(方法在编译期就能确定调用哪个版本)。 **特点** * 发生在同一个类里,和继承没关系。 * 方法签名(方法名+参数列表)必须不同。 * 常用在构造方法、工具方法中实现多种输入形式。 **示例** ```java class Calculator { int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } int add(int a, int b, int c) { return a + b + c; } } Calculator c = new Calculator(); System.out.println(c.add(1, 2)); // 调用第1个 System.out.println(c.add(1.5, 2.5)); // 调用第2个 System.out.println(c.add(1, 2, 3)); // 调用第3个 ``` ## 3. 重写(Override) **定义** * 子类对**从父类继承**的方法重新提供实现,方法签名必须**完全相同**(方法名+参数列表相同),返回值类型相同或是其子类型,访问权限不能更严格。 * 属于**运行时多态**(调用哪个版本,在运行时由对象类型决定)。 **特点** * 必须发生在**继承关系**中。 * `@Override` 注解可防止拼写或参数错误。 * 子类方法不能比父类方法抛出更多(更广)的受检异常。 * 父类的 `private`、`static`、`final` 方法不能被重写。 **示例** ```java class Animal { void speak() { System.out.println("动物叫"); } } class Dog extends Animal { @Override void speak() { System.out.println("汪汪"); } } Animal a = new Dog(); a.speak(); // 运行时多态,输出 "汪汪" ``` ## 4. 三者关系与区别 | 对比项 | 继承 | 重载 | 重写 | | ---- | ---------- | ---------- | -------------- | | 发生关系 | 类与类(或类与接口) | 同一类内 | 子类与父类 | | 方法名 | 不要求相同 | 必须相同 | 必须相同 | | 参数列表 | 无要求 | 必须不同 | 必须相同 | | 返回值 | 无要求 | 可不同(不影响重载) | 必须相同或是父类返回值的子类 | | 访问权限 | 无要求 | 无要求 | 不能更严格 | | 多态类型 | - | 编译时多态 | 运行时多态 |发布于 2025-08-13 17:27 •IP属地 广东举报评论收藏
公众号进入网站体验更佳

