Java 新手入门:重载和重写傻傻分不清?一篇文章带你清晰理解!

简介: Java 新手入门:重载和重写傻傻分不清?一篇文章带你清晰理解!

很多 Java 新手小白在学习面向对象编程时,经常会对“重载”和“重写”这两个概念感到困惑。它们看似相似,实则区别很大。

今天,本文就用通俗易懂的语言,结合实际例子,为大家详细讲解 Java 中的重载和重写。

一、 重载 (Overload)

重载是指在同一个类中,定义多个名称相同但参数列表不同的方法。参数列表的不同可以体现在参数的个数、类型或顺序上。

想象一下,你去餐厅吃饭,菜单上有各种菜品,比如:

  • 鱼香肉丝 (不辣)
  • 鱼香肉丝 (微辣)
  • 鱼香肉丝 (中辣)
  • 鱼香肉丝 (特辣)

虽然菜名都叫“鱼香肉丝”,但你可以根据自己的口味选择不同的辣度。这就是生活中的“重载”。

代码示例
public class Restaurant {
 
    // 不辣的鱼香肉丝
    public void orderYuXiangRouSi() {
        System.out.println("您点的是不辣的鱼香肉丝。");
    }
 
    // 微辣的鱼香肉丝
    public void orderYuXiangRouSi(String spicyLevel) {
        System.out.println("您点的是" + spicyLevel + "的鱼香肉丝。");
    }
 
    // 例如,可以根据人数点不同分量的鱼香肉丝
    public void orderYuXiangRouSi(int peopleCount) {
        System.out.println("您点了" + peopleCount + "人份的鱼香肉丝。");
    }
 
    // 还可以根据辣度和人数点餐
    public void orderYuXiangRouSi(String spicyLevel, int peopleCount) {
        System.out.println("您点了" + peopleCount +"人份" + spicyLevel + "的鱼香肉丝。");
    }
 
    public static void main(String[] args) {
        Restaurant restaurant = new Restaurant();
        restaurant.orderYuXiangRouSi(); // 调用不带参数的方法
        restaurant.orderYuXiangRouSi("微辣"); // 调用带辣度参数的方法
        restaurant.orderYuXiangRouSi(3); // 调用带人数参数的方法
        restaurant.orderYuXiangRouSi("中辣", 2); // 调用带辣度和人数参数的方法
    }
}

在上面的代码中,orderYuXiangRouSi() 方法根据参数个数和类型的不同,提供了多种点餐选择。

在实际开发中,我们经常需要根据不同的参数类型或数量执行不同的逻辑。例如:
public class Calculator {
 
    public int add(int a, int b) {
        return a + b;
    }
 
    public double add(double a, double b) {
        return a + b;
    }
 
    public int add(int... numbers) {
        int sum = 0;
        for (int number : numbers) {
            sum += number;
        }
        return sum;
    }
}

上面的 Calculator 类中,add() 方法根据传入参数的不同,实现了整数、浮点数以及多个数字的加法运算。

二、 重写 (Override)

重写是指子类重新定义父类中已存在的方法。重写要求子类方法与父类方法具有相同的方法名、参数列表和返回类型 (Java 5 后允许返回类型是协变的)。

你可以把“继承”想象成父子关系。父亲会做饭,儿子也会做饭,但儿子做的饭可能和父亲的味道不一样。这就是生活中的“重写”。

代码示例
class Animal {
    public void makeSound() {
        System.out.println("动物发出声音");
    }
    
    public void eat(){
        System.out.println("动物正在进食");
    }
}
 
class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("喵喵喵");
    }
 
    @Override
    public void eat(){
        System.out.println("猫咪使用猫粮进食");
    }
}
 
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("汪汪汪");
    }
 
    @Override
    public void eat(){
        System.out.println("狗狗使用狗粮进食");
    }
}
 
public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.makeSound(); // 输出:动物发出声音
        animal.eat(); // 输出:动物正在进食
 
        Cat cat = new Cat();
        cat.makeSound(); // 输出:喵喵喵
        cat.eat(); // 输出:猫咪使用猫粮进食
 
        Dog dog = new Dog();
        dog.makeSound(); // 输出:汪汪汪
        dog.eat(); // 输出:狗狗使用狗粮进食
    }
}

在上面的代码中,Cat 类和 Dog 类都继承了 Animal 类,并分别重写了 makeSound() 方法和 eat() 方法, 使其拥有了各自的声音和进食习惯。

在图形界面开发中,我们经常需要重写父类的 paint() 方法来实现自定义的绘图逻辑。例如:

import javax.swing.*;
import java.awt.*;
 
public class MyPanel extends JPanel {
 
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        // 自定义绘图逻辑,例如绘制一个红色的矩形
        g.setColor(Color.RED);
        g.fillRect(10, 10, 50, 50);
    }
}

上面的代码中,MyPanel 类继承自 JPanel 类,并重写了 paintComponent() 方法,实现了自定义的绘图逻辑。

三、 重载和重写的区别


四、 总结

重载和重写都是 Java 中非常重要的概念,掌握它们对于理解面向对象编程至关重要。希望通过本文的讲解,大家能够清晰地理解这两个概念,并在实际编程中灵活运用。

相关文章
|
17天前
|
开发框架 IDE Java
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
34 1
java制作游戏,如何使用libgdx,入门级别教学
|
8天前
|
安全 Java 测试技术
🌟Java零基础-反射:从入门到精通
【10月更文挑战第4天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
13 2
|
12天前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
19 5
|
1月前
|
Java 程序员 UED
Java中的异常处理:从入门到精通
【9月更文挑战第23天】在Java编程的世界中,异常是程序执行过程中不可避免的事件,它们可能会中断正常的流程并导致程序崩溃。本文将通过浅显易懂的方式,引导你理解Java异常处理的基本概念和高级技巧,帮助你编写更健壮、更可靠的代码。我们将一起探索如何捕获和处理异常,以及如何使用自定义异常来增强程序的逻辑和用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和实用的技巧。
35 4
|
1月前
|
Java 编译器 数据安全/隐私保护
Java 重写(Override)与重载(Overload)详解
在 Java 中,重写(Override)和重载(Overload)是两个容易混淆但功能和实现方式明显不同的重要概念。重写是在子类中重新定义父类已有的方法,实现多态;重载是在同一类中定义多个同名但参数不同的方法,提供多种调用方式。重写要求方法签名相同且返回类型一致或为父类子类关系,而重载则关注方法参数的差异。理解两者的区别有助于更好地设计类和方法。
|
2月前
|
算法 Java 开发者
Java 编程入门:从零到一的旅程
本文将带领读者开启Java编程之旅,从最基础的语法入手,逐步深入到面向对象的核心概念。通过实例代码演示,我们将一起探索如何定义类和对象、实现继承与多态,并解决常见的编程挑战。无论你是编程新手还是希望巩固基础的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
1月前
|
Java 程序员
Java中的异常处理:从入门到精通
在Java编程的世界中,异常处理是保持程序稳定性和可靠性的关键。本文将通过一个独特的视角—把异常处理比作一场“捉迷藏”游戏—来探讨如何在Java中有效管理异常。我们将一起学习如何识别、捕捉以及处理可能出现的异常,确保你的程序即使在面对不可预见的错误时也能优雅地运行。准备好了吗?让我们开始这场寻找并解决Java异常的冒险吧!
|
2月前
|
Java 程序员 UED
Java 中的异常处理:从入门到精通
【8月更文挑战第31天】在Java编程的世界中,异常处理是保持应用稳定性的重要机制。本文将引导你理解异常的本质,学会如何使用try-catch语句来捕获和处理异常,并探索自定义异常类的魅力。我们将一起深入异常的世界,让你的代码更加健壮和用户友好。
|
2月前
|
Java 数据库连接 开发者
Java中的异常处理:从入门到精通
【8月更文挑战第31天】 在编程世界中,错误和异常就像是不请自来的客人,总是在不经意间打扰我们的程序运行。Java语言通过其异常处理机制,为开发者提供了一套优雅的“待客之道”。本文将带你走进Java异常处理的世界,从基础语法到高级技巧,再到最佳实践,让你的程序在面对意外时,也能从容不迫,优雅应对。
|
2月前
|
Java 开发者
Java 中的异常处理:从入门到精通
【8月更文挑战第31天】在Java的世界中,异常处理是保持程序健壮性的基石。本文将带你探索Java异常处理的奥秘,从基本的try-catch语句到深入理解自定义异常和最佳实践。你将学会如何优雅地处理错误,确保你的代码不仅能够面对意外情况,还能从中恢复。让我们一起开启这段旅程,掌握让程序更加稳定和可靠的技巧吧!