java重写和重载的区别 - 面试宝典

举报
皮牙子抓饭 发表于 2023/08/09 09:10:50 2023/08/09
【摘要】 Java中的重写(Override)和重载(Overload)是两个重要的概念。 重写是指在子类中重新定义父类中已有的方法,方法名、参数列表和返回值类型必须与父类中的方法一致。通过重写,子类可以修改父类方法的实现,实现自己的逻辑。 重载是指在一个类中定义多个相同名称但参数列表不同的方法,可以有不同的返回值类型。通过重载,同一个类可以根据不同的参数列表来执行不同的操作。 总结区别如下:重写是子...

Java中的重写(Override)和重载(Overload)是两个重要的概念。 重写是指在子类中重新定义父类中已有的方法,方法名、参数列表和返回值类型必须与父类中的方法一致。通过重写,子类可以修改父类方法的实现,实现自己的逻辑。 重载是指在一个类中定义多个相同名称但参数列表不同的方法,可以有不同的返回值类型。通过重载,同一个类可以根据不同的参数列表来执行不同的操作。 总结区别如下:

  1. 重写是子类对父类方法的重新定义,重载是同一个类中定义多个相同名称的方法。
  2. 重写需要保持方法名、参数列表和返回值类型与父类方法一致,重载只需要保持方法名相同但参数列表不同。
  3. 重写是动态绑定的,即在运行时根据实际对象类型调用相应的方法,重载是静态绑定的,即在编译时根据方法参数类型和数量确定调用的方法。 举个例子来说明:
javaCopy codeclass Parent {
    public void print() {
        System.out.println("Parent's print method");
    }
}
class Child extends Parent {
    @Override
    public void print() {
        System.out.println("Child's print method");
    }
    public void print(int num) {
        System.out.println("Child's overloaded print method with parameter: " + num);
    }
}
public class Main {
    public static void main(String[] args) {
        Parent parent = new Parent();
        parent.print(); // 输出: Parent's print method
        Child child = new Child();
        child.print(); // 输出: Child's print method
        child.print(10); // 输出: Child's overloaded print method with parameter: 10
    }
}

在上面的例子中,Child类重写了Parent类的print方法,并且还定义了一个重载的print方法。在创建Child类的对象时,可以根据需要调用不同的方法。

好的,下面给出一个更具体的示例代码:

javaCopy codeclass Shape {
    public void draw() {
        System.out.println("Drawing a shape");
    }
}
class Circle extends Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a circle");
    }
}
class Square extends Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a square");
    }
}
public class Main {
    public static void main(String[] args) {
        Shape shape = new Shape();
        shape.draw(); // 输出: Drawing a shape
        Circle circle = new Circle();
        circle.draw(); // 输出: Drawing a circle
        Square square = new Square();
        square.draw(); // 输出: Drawing a square
    }
}

在上面的示例代码中,我们定义了一个​​Shape​​类和两个子类​​Circle​​和​​Square​​。​​Shape​​类中有一个​​draw​​方法,分别在子类​​Circle​​和​​Square​​中进行了重写。在​​Main​​类中,我们创建了一个​​Shape​​对象、一个​​Circle​​对象和一个​​Square​​对象,并分别调用它们的​​draw​​方法。根据对象的实际类型,会调用相应的重写方法。输出结果显示了不同对象的不同行为。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。