Java中方法重写与重载的区别

作者:大雄有哆啦梦 时间:2022-07-25 04:49:01 

Java方法重写(Override)与重载(Overload)的区别(超详细)

首页在我们要学习这个知识点之前,应该要先了解什么是多态?

在最初学习java的时候,人们都知道,java这种面向对象的语言,一共有三大特征,分别是:封装、继承、多态。

多态是同一个行为具有多个不同表现形式或形态的能力。

举个例子,比如大多数动物(抽象类)会叫,但是狗(实现类)就是汪汪汪,猫(实现类)就是喵喵喵。

多态实现的必要条件

子类必须继承父类必须有重写父类引用指向子类对象

多态的实现途径

多态的实现途径有三种:重写、重载、接口实现,虽然它们的实现方式不一样,但是核心都是:同一行为的不同表现形式。

在大概了解什么是多态后,接下来就看看Java方法重写(Override)与重载(Overload)

一、重写(Override)

父类与子类之间多态的关系,对父类的函数进行重新定义。如果在子类中定义的某些方法和父类有相同的名称和参数,那么这就是方法被重写了。
但是有时候子类并不想一动不动的继承父类的方法,想做一些修改,这就需要采用方法的重写。
方法的重写体现在子父类当中,最典型的是子类重写父类中的方法.
重写代码如下:

public class Father {
       public void walk(){
           System.out.println("我是父亲");
     }

}

public class Son extends Father {
   @Override//方法重写
   public void walk() {
       System.out.println("我是儿子");
   }
}

方法重写又称为方法覆盖。
如果子类的方法与父类中的某一个方法具有相同的方法名、返回类型和参数列表,则新方法将覆盖原有方法。子类方法的访问修饰权限不能小于父类的。

二、重载(Overload)

多个同名的方法同时存在,具有不同的参数/类型。重载是一个类中多态性的一种表现重载的时候,方法名必须一样,但参数类型和个数不一样,返回值类型可以一样也可以不一样。我们不能以返回值类型作为重载方法的区分标准!!!如果参数类型和个数一样,返回值类型不同是不算重载的.
这种写法会直接报错.因为在调用方法的时候,我们还不知道方法的返回值类型,所以编译器无法区分你调用的是哪个方法。在调用方法时,通过传递给它们不同的参数个数和参数类型来决定去使用哪个对应的方法,这就是多态性。
重载代码如下:

public void eat(){
       System.out.println("我是干饭人" );
   }

//    public int eat(){  会报错
//        return 4;
//    }
   //报错原因:参数类型和个数一样,返回值类型不同是不算重载的
   //因为在调用方法的时候,我们还不知道方法的返回值类型,所以编译器无法区分你调用的是哪个方法。

public void eat(String name){
       System.out.println("我是干饭人:"+name );
   }

public void eat(String name,int age){
       System.out.println("我是干饭人:"+name+"我今年"+age );
   }

这里要注意:
重写Override是父类与子类之间多态的关系,而重载Overload是一个类中多态性的表现。

三、总结

方法重载Overload:

1、同一个类中

2、方法名相同,参数列表不同(参数顺序、个数、类型)

3、方法返回值、访问修饰符任意

4、与方法的参数名无关

方法重写Override:

1、有继承关系的子类中

2、方法名相同,参数列表相同(参数顺序、个数、类型),方法返回值相同

3、访问修饰符,访问范围需要大于等于父类的访问范围

4、与方法的参数名无关

来源:https://blog.csdn.net/weixin_46015018/article/details/122600829

标签:Java,重写,重载
0
投稿

猜你喜欢

  • java内部类的定义与分类示例详解

    2022-07-01 20:16:47
  • C#基于NPOI生成具有精确列宽行高的Excel文件的方法

    2022-12-18 13:32:46
  • Java使用Graphics2D绘制SVG和PNG的方法

    2021-11-13 01:03:51
  • 关于Android中ListView嵌套GridView的问题

    2023-09-16 10:56:39
  • C#操作windows系统进程的方法

    2023-09-01 03:13:26
  • Java concurrency集合之ArrayBlockingQueue_动力节点Java学院整理

    2023-07-01 22:19:29
  • Android TextView渐变颜色和方向及动画效果的设置详解

    2022-06-13 09:23:58
  • Android获得所有存储设备位置的最佳方法

    2022-06-27 21:08:51
  • springboot项目配置swagger2示例详解

    2021-09-01 04:24:47
  • C#多线程之取消架构介绍

    2022-03-06 22:14:42
  • Android 事件分发详解及示例代码

    2023-09-08 05:18:45
  • 探究Java常量本质及三种常量池(小结)

    2023-06-17 10:28:17
  • java中SynchronizedList和Vector的区别详解

    2023-08-23 10:13:12
  • Android卫星菜单效果的实现方法

    2023-10-18 12:41:34
  • 利用POI生成EXCEL文件的方法实例

    2023-11-23 21:44:14
  • Android检测手机多点触摸点数的方法

    2023-03-10 11:08:35
  • Java数组的定义与使用

    2023-08-12 11:44:38
  • Android开发之TimePicker控件用法实例详解

    2022-02-10 10:18:50
  • Java传入用户名和密码并自动提交表单实现登录到其他系统的实例代码

    2023-09-20 00:40:46
  • c#和javascript函数相互调用示例分享

    2023-10-08 21:33:52
  • asp之家 软件编程 m.aspxhome.com