当前位置:首页 > Java

java方法如何改写

2026-03-23 19:45:01Java

方法重写的基本概念

方法重写(Override)是面向对象编程中多态性的重要体现,允许子类重新定义父类中已有的方法。重写后的方法需满足以下条件:

  • 方法名、参数列表、返回类型必须与父类方法一致(返回类型在Java 5+支持协变类型)。
  • 访问修饰符不能比父类更严格(如父类为protected,子类可为public,但不能为private)。
  • 父类方法若被finalstatic修饰,则不能被重写。

重写与重载的区别

  • 重写(Override):子类对父类方法的重新实现,要求方法签名完全一致。
  • 重载(Overload):同一类中方法名相同但参数列表不同,与继承无关。

实际代码示例

class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog barks"); // 重写父类方法
    }
}

子类Dog重写了AnimalmakeSound()方法,调用时将执行子类逻辑。

使用@Override注解

添加@Override注解可显式声明方法为重写,编译器会检查是否符合重写规则,避免拼写错误或签名不匹配的问题。

java方法如何改写

动态绑定机制

Java通过动态绑定(运行时多态)决定调用哪个方法。例如:

Animal myDog = new Dog();
myDog.makeSound(); // 输出 "Dog barks",实际调用子类方法

访问父类被重写的方法

通过super关键字可调用父类方法:

java方法如何改写

class Dog extends Animal {
    @Override
    public void makeSound() {
        super.makeSound(); // 先调用父类方法
        System.out.println("Dog barks");
    }
}

协变返回类型

Java 5+支持返回类型为子类类型:

class Animal {
    public Animal getInstance() { return new Animal(); }
}

class Dog extends Animal {
    @Override
    public Dog getInstance() { return new Dog(); } // 返回类型为Dog
}

异常处理规则

  • 重写方法不能抛出比父类方法更宽泛的受检异常(如父类抛出IOException,子类不能抛出Exception)。
  • 非受检异常(RuntimeException)无此限制。

静态方法不能被重写

若父类方法为static,子类同名方法实际为隐藏(Hide),而非重写。调用时取决于引用类型:

class Parent {
    static void show() { System.out.println("Parent"); }
}

class Child extends Parent {
    static void show() { System.out.println("Child"); }
}

Parent obj = new Child();
obj.show(); // 输出 "Parent",因为静态方法绑定到类而非实例

标签: 方法java
分享给朋友:

相关文章

java如何创建文件

java如何创建文件

使用 File 类创建文件 通过 File 类的 createNewFile() 方法创建文件。此方法返回布尔值,表示文件是否成功创建。 import java.io.File; import ja…

如何学java

如何学java

学习Java的基础知识 Java是一门面向对象的编程语言,掌握基础语法是入门的关键。需要了解变量、数据类型、运算符、控制结构(如if-else、for循环、while循环)、数组等概念。可以通过官方文…

java如何自学

java如何自学

确定学习目标和路径 自学Java需要明确目标,例如开发Web应用、Android应用或后端服务。根据目标选择学习重点,如Java基础、Spring框架或Android开发。制定阶段性计划,从基础语法到…

java如何输入字符串

java如何输入字符串

使用 Scanner 类 在 Java 中,可以通过 java.util.Scanner 类来输入字符串。以下是一个示例代码: import java.util.Scanner; public c…

java如何连接数据库

java如何连接数据库

Java连接数据库的方法 Java连接数据库通常使用JDBC(Java Database Connectivity)技术,以下是具体步骤和示例代码。 加载数据库驱动 在连接数据库之前,需要加载对应的…

java如何实现异步

java如何实现异步

Java实现异步的方法 Java中实现异步编程可以通过多种方式,每种方式适用于不同的场景和需求。以下是常见的实现方法: 使用Thread类 创建新线程执行异步任务是最基础的方式。通过继承Thread…