Java方法重载与覆盖详解:规则与实例

5星 · 超过95%的资源 需积分: 44 17 下载量 94 浏览量 更新于2024-09-25 收藏 3KB TXT 举报
Java 中的方法重载(Overloading)是指在同一类中,可以有多个同名的方法,但它们的参数列表必须不同,包括参数类型、数量或顺序。这允许开发者根据传入的不同参数执行不同的操作,提高代码的灵活性。重载方法的规则如下: 1. **参数差异**:方法重载依赖于参数的不同,包括参数类型、个数和顺序。例如,`fun(int, float)` 和 `fun(String, int)` 是重载的,但 `fun(int, int)` 不算,因为参数类型相同。 2. **访问权限无关**:重载不考虑方法的访问修饰符(如 public、protected、private),只看参数。访问权限的改变不影响方法的重载。 3. **异常处理不影响**:方法重载不考虑抛出异常的类型和数量,异常处理部分不会作为区分重载的依据。 4. **继承中的限制**:如果父类的某个方法是私有(private),子类不能直接覆盖它,除非通过 protected 或者没有访问修饰符的方法实现间接调用。 重写(Override)则是指在子类中提供一个与父类中同名、同参数列表的方法,以实现父类方法的功能。重写要求: - 子类方法必须具有与父类相同的访问修饰符(如果不是 final 的)。 - 方法名、参数列表完全匹配。 - 返回类型可以不同,但通常保持一致以实现功能替代。 - 子类方法的抛出异常不能多于或更少于父类方法,且异常类型必须是父类方法抛出异常的子类。 - 如果父类方法是 final,则子类不能覆盖它,因为 final 方法不能被重写。 下面给出的代码示例展示了这些概念的应用: ```java // 父类 aa public class aa { public float getNum() { return 3.0f; } // 原始方法 // 这里是非重载的错误示例,因为参数类型相同 // public float getNum(int i) { return 4.0f; } // 重写示例,子类 TestFile 需要覆盖父类的 getNum 方法 public class TestFile extends aa { public void getNum(int i) { return; } // 不是重载,无返回值,用于演示覆盖 public float getNum() { return 4.0f; } // 正确的重写,参数列表与父类一致 // 试图重写静态方法,这是不允许的 // public static float getNum() throws MyException { ... } } } ``` 总结来说,Java 中的方法重载和重写是面向对象编程中两个重要的概念,它们在类的设计中起到了灵活扩展和子类行为定制的作用,但需遵循特定的规则以确保程序的正确性。