当前位置: 首页 > news >正文

java中的重载(overload)和重写(override)区别

方法重载(overload):

  方法重载就是在一个类中可以创建多个方法,它们具有相同的名字,但是具有不同的参数和不同定义,调用方法时通过传递给他们的不同参数个数和参数列表决定具体使用      哪        个方法,这就是多态性,重载的时候方法名一样,参数类型和个数不一样,返回值烈性可以相同可以不同,可以有不同的访问修饰符,可以抛出不同的异常。

  例子:

  

  
package com.test.entity;
public class Dog {

    Dog()
    {
        this.bark();
    }
    void bark()//bark()方法是重载方法
    {
        System.out.println("no barking!");
        this.bark("female", 3.4);
    }
    void bark(String m,double l)//注意:重载的方法的返回值都是一样的,
    {
        System.out.println("a barking dog!");
        this.bark(5, "China");
    }
    void bark(int a,String n)//不能以返回值区分重载方法,而只能以“参数类型”和“类名”来区分
    {
        System.out.println("a howling dog");
    }



    public static void main(String[] args)
    {
        Dog dog = new Dog();
        dog.bark();
        dog.bark("male", 3.5);
        dog.bark(5, "China");
    }
}

  

方法重写(override):

  父类与子类之间的多态性,对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写,在java中子类可以继承父类中的方法,            而不需要重新编写相同的方法,但有时子类并不想原封不动地继承父类的方法,而是想做一定的修改,这就需要采用方法重写,方法重写又成方法覆盖。

  例子:

  

OOP三大特性:继承,多态,封装。

 

    public class Base
    {
        void test(int i)
        {
            System.out.print(i);
        }
        void test(byte b)
        {
            System.out.print(b);
        }
    }
    public class TestOverriding extends Base
    {
        void test(int i)
        {
            i++;
            System.out.println(i);
        }
          public static void main(String[]agrs)
        {
            Base b=new TestOverriding();
            b.test(0)
            b.test((byte)0)
        }
    }

 


    这时的输出结果是1     0,这是运行时动态绑定的结果。

 

 

 

重写的主要优点是能够定义某个子类特有的特征:

 

public class Father{

 

   public void speak(){

 

       System.out.println(Father);

 

    }

 

}

 

public class Son extends Father{

 

    public void speak(){

 

        System.out.println("son");

 

   }

 

}

 

这也叫做多态性,重写方法只能存在于具有继承关系中,重写方法只能重写父类非私有的方法。

当上例中Father类speak()方法被private时,Son类不能重写出Father类speak()方法,此时Son类speak()方法相当与在Son类中定义的一个speak()方法。

Father类speak()方法一但被final时,无论该方法被public,protected及默认所修饰时,Son类根本不能重写Father类speak()方法,

试图编译代码时,编译器会报错。例:

public class Father{

   final public void speak(){

       System.out.println("Father");

    }

}

public class Son extends Father{

    public void speak(){

       System.out.println("son");

    }

}       //编译器会报错;

 

Father类speak()方法被默认修饰时,只能在同一包中,被其子类被重写,如果不在同一包则不能重写。

Father类speak()方法被protoeted时,不仅在同一包中,被其子类被重写,还可以不同包的子类重写。

 

重写方法的规则:

1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。

2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。

3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:

父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。

 

而重载的规则:

1、必须具有不同的参数列表;

2、可以有不责骂的返回类型,只要参数列表不同就可以了;

3、可以有不同的访问修饰符;

4、可以抛出不同的异常;

 

重写与重载的区别在于:

重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值。

用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般.

 

转载于:https://www.cnblogs.com/mflr/p/9256108.html

相关文章:

  • 这是一套Java菜鸟到大牛的学习路线之高级教程,由工作了10年的资深Java架构师整理。...
  • 雷林鹏分享:PHP 多维数组
  • 联系我过户这些快到期的域名
  • Maven使用过程中遇到的问题,及解决方案
  • linux磁盘管理
  • spring配置中classpath: 与classpath*:的区别
  • 虚拟机(Virtual Machine)和容器(Container)的对比
  • Linux第四章 进程
  • css选择器有哪些
  • Hbase备份
  • 前端战五渣学前端——初探Parcel急速打包
  • Android程序员搞Web之HTNL(一)
  • mysql-proxy安装过程 (转)
  • Day3LJY
  • angular 摇树优化
  • [PHP内核探索]PHP中的哈希表
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • flask接收请求并推入栈
  • JavaWeb(学习笔记二)
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • linux安装openssl、swoole等扩展的具体步骤
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Objective-C 中关联引用的概念
  • php面试题 汇集2
  • React 快速上手 - 07 前端路由 react-router
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 后端_ThinkPHP5
  • 码农张的Bug人生 - 见面之礼
  • 如何编写一个可升级的智能合约
  • 软件开发学习的5大技巧,你知道吗?
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 首页查询功能的一次实现过程
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 硬币翻转问题,区间操作
  • 正则学习笔记
  • 仓管云——企业云erp功能有哪些?
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • # 数论-逆元
  • #git 撤消对文件的更改
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $forceUpdate()函数
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (SpringBoot)第二章:Spring创建和使用
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)C#调用WebService 基础
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)