java中正确的区分重载和重写

简介: 我们在平时开发的时候经常会遇见这样一个问题,方法的重载和重写。有时候经常搞混,这篇文章就是为了很好的去整理区分一下。一个类中,可以有很多的构造方法,而且名字相同都是类名,其实这些方法就已经构成了重载。也就是说,在一个类中,可以有很多名字相同的不同方法。现在一个问题来了,就是java是如何区分这些方法的呢?

方法重载


其实区分重载,有一个很简便的方法,那就是每一个方法有一个独一无二的参数列表。

public class Son extends Father{
    int fff(){
        return 0;
    }
    String fff(int x,String y){
        return "";
    }
    void fff(String y,int x){};
    public static void main(String[] args) {
        Son son=new Son();      
    }
}

由以上代码可以看到:


1、参数个数不同可以区分


2、参数的顺序不同可以区分。


注意;返回值类型不同不能区分。


为什么返回值类型不同不能区分呢?这是因为有时候我们定义的方法,我们只是想要简单地去调用,而不想去获取他的返回值。


比如:在调用fff()时,只需要调用fff()或者是fff(1,"数据")而不去获取他的返回值。这样jvm是无法区分的。


方法重写


先看一下重写的概念:


1、在子类中可以根据需要对从基类中继承来的方法进行重写。


2、重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。(注:返回值可以为父类中返回值的子类型.参数若为子类,则不是重写是重载)


3、重写方法不能使用比被重写的方法更严格的访问权限。


4、重写方法不能声明抛出比被重写方法范围更大的异常类型。


总结:重写是子类对所继承父类相同方法的一种更改,这个更改需要遵循格式按照父类的格式,访问权限,抛出异常等等,都在父类方法控制范围内,内部具体实现可以实现不同的效果。


通俗一点来说:重写就是对父类的的同一个方法的改写,但是别人怎么知道你这是重写,不是添加的新方法?这就要求格式必须跟父类相同,别人一看,呀,他俩长的一模一样(指的上面2,3,4规则),肯定是重新写了,就是重写。


看一个例子:


定义父类:

public class Father extends Grandpa {   
    String add(int a,int b){
        int c=a+b;
        return ""+c;
    }
}

定义子类

public class Son extends Father{
    String add(int a,int b){
        int c=a+b;
        return ""+c;
    }
    public static void main(String[] args) {
        Son son=new Son();      
    }
}

这样就完成了方法的重写。

相关文章
|
10天前
|
监控 Java 数据库连接
Java线程管理:守护线程与用户线程的区分与应用
在Java多线程编程中,线程可以分为守护线程(Daemon Thread)和用户线程(User Thread)。这两种线程在行为和用途上有着明显的区别,了解它们的差异对于编写高效、稳定的并发程序至关重要。
19 2
|
13天前
|
Oracle 安全 Java
深入理解Java生态:JDK与JVM的区分与协作
Java作为一种广泛使用的编程语言,其生态中有两个核心组件:JDK(Java Development Kit)和JVM(Java Virtual Machine)。本文将深入探讨这两个组件的区别、联系以及它们在Java开发和运行中的作用。
35 1
|
2月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
26 5
|
3月前
|
Java 编译器 数据安全/隐私保护
Java 重写(Override)与重载(Overload)详解
在 Java 中,重写(Override)和重载(Overload)是两个容易混淆但功能和实现方式明显不同的重要概念。重写是在子类中重新定义父类已有的方法,实现多态;重载是在同一类中定义多个同名但参数不同的方法,提供多种调用方式。重写要求方法签名相同且返回类型一致或为父类子类关系,而重载则关注方法参数的差异。理解两者的区别有助于更好地设计类和方法。
261 1
|
4月前
|
Java
【Java基础面试十八】、说一说重写与重载的区别
这篇文章阐述了Java中重写与重载的区别:重载是同一个类中方法名相同但参数列表不同的方法之间的关系,而重写是子类中方法与父类中相同方法名和参数列表的方法之间的关系,且子类的返回值应小于等于父类,访问修饰符应大于等于父类。
【Java基础面试十八】、说一说重写与重载的区别
|
4月前
|
Java
【Java基础面试二十二】、为什么要重写hashCode()和equals()?
这篇文章解释了为什么需要重写`hashCode()`和`equals()`方法:因为Object类的`equals()`默认使用`==`比较,这在业务中通常是不够的,我们需要根据对象内容来比较相等性;同时,为了保持`hashCode()`与`equals()`的联动关系,一旦重写了`equals()`,通常也需要重写`hashCode()`。
【Java基础面试二十二】、为什么要重写hashCode()和equals()?
|
4月前
|
Java
【Java基础面试十九】、构造方法能不能重写?
这篇文章指出Java中的构造方法不能被重写,因为构造方法必须与类名相同,而重写要求子类方法与父类方法同名,允许构造方法重写将违背这一规则。
【Java基础面试十九】、构造方法能不能重写?
|
4月前
|
Java
描述 Java 中的重载和重写
【8月更文挑战第22天】
22 0
|
4月前
|
存储 Java 索引
|
7月前
|
Java 编译器
Java的重载与重写的区别
Java的重载与重写的区别