Java中重写和重载与多态的关系

2019-09-05 00:57:41 留下一天今天 阅读数 67  收藏 更多

分类专栏: java进阶之路
 
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

重写(Override)

重写指的是子类对父类可允许访问的方法进行重新编写,两者有相同的名称,相同参数,相同返回值,但是内容却不相同,子类的新方法将覆盖父类中原有的方法。

重载(Overload)

重载是在同一个类中,方法名称相同,参数不同。这样同名不同参的方法被称为重载。

重载VS重写

重写规则:

1、父类成员发放只能被它的子类重写

2、子类方法的访问修饰符一定要大于父类的访问修饰符(public>protected>default>private)。

3、子类和父类在同一包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。

4、子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非final 方法。

5、声明为 final 的方法不能被重写。

6、声明为 static 的方法不能被重写,但是能够被再次声明。

7、子类方法的参数列表、方法名称、返回值必须和父类方法一致

8、构造方法不能被重写。

9、如果不能继承一个方法,则不能重写这个方法。

重写示例:

public class Cat {
    public static void main(String[] args) {
        Cat cat = new Jack();
        cat.name();
    }

    public void name(){
        System.out.println("cat");
    }
}

class Jack extends Cat{

    public void name(){
        System.out.println("jack");
    }
}

重载规则:

1、被重载的方法必须改变参数列表(参数个数或类型不一样);

2、被重载的方法可以改变返回类型;

3、被重载的方法可以改变访问修饰符;

4、被重载的方法可以声明新的或更广的检查异常;

5、方法能够在同一个类中或者在一个子类中被重载。

6、无法以返回值类型作为重载函数的区分标准。

重载示例:


public class Cat {

    public static void main(String[] args) {
        Cat cat = new Cat ();
        cat.name();
        cat.name("Jack");
    }

    public void name(){
        System.out.println("cat");
    }

    public void name(String newName){
        System.out.println(newName);
    }
}

上面说完了重载与重写,下来我们需要看看什么是多态呢?还有它和重载与重写之间有什么样的关系呢?

多态

多态的概念,就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

如果按照这个概念来定义的话,那么多态应该是一种运行期的状态。

实现多态,需要三个条件:

1、即有类继承或者接口实现。

2、子类要重写父类的方法

3、父类的引用指向子类的对象。

更多时候,大部分人认为动态还分为动态多态和静态多态。将重载视为静态多态,因为他需要在编译期决定具体调用哪个方法、关于这个动态静态的说法,我更偏向于重载和多态其实是无关的。我认为,多态应该是一种运行期特性,Java中的重写才是多态的体现。

[转帖]Java中重写和重载与多态的关系的更多相关文章

  1. Java中重写与重载的辨析

    摘要:在我们学习Java过程中,重写与重载使我们在面向对象里要学习的重要知识点之一,那我们看看它们有那些区别: 一.重写 1.概念:简单的说就是子类将从父类继承而来的方法重新实现一次. 2.特点: ① ...

  2. 浅谈Java中重写与重载的区别

    重载和重写是Java中两个截然不同的概念.但是却因为名字相近导致很多人经常混淆. 下面用例子展示出他们之间的区别. 在Java中,重载(overloading) 发生在本类.方法名相同,参数列表不同, ...

  3. Java中重写与重载

    重写(覆盖):发生在子类与父类之间:方法名相同方法的个数.类型相同返回值类型小于等于父类的返回值类型 重载:发生在一个类中:方法名相同方法的个数.类型不同返回值类型可以相同也可以不相同

  4. Java中重写与重载的区别

    方法重载:关键字overload,方法名和方法的返回类型都相同,方法参数个数和类型不一样方法重写:也叫方法覆盖,关键字override,相对于类继承而言,重写的方法名,返回类型,参数个数,参数类型都要 ...

  5. 在Python中该如何实现Java的重写与重载

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:清风python PS:如有需要Python学习资料的小伙伴可以加点击 ...

  6. java中方法的重载和覆盖

    java中方法的重载和覆盖 先来了解一下这两个名词的含义. 重载: 在一个类当中才可以重载,方法名相同,参数个数不同或参数个数相同而参数类型不同. 覆盖: 又称重写,在派生类(子类)中重写基类(父类) ...

  7. Java中方法的重载

    Java 中方法的重载 问: 什么是方法的重载呢? 答: 如果同一个类中包含了两个或两个以上方法名相同.方法参数的个数.顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了.如下所示 4 个方 ...

  8. Java中的方法重载

    一.什么是方法重载? 方法重载就是两个或多个方法的方法名相同,但是方法的形参类型,数量,顺序不同. 上面提到的三点也就是一个方法的特征标,只要有一点不相同,则该方法就不相同,就可以实现重载. 在这里的 ...

  9. Java学习笔记十二:Java中方法的重载

    Java中方法的重载 什么是方法的重载呢? 如果同一个类中包含了两个或两个以上方法名相同.方法参数的个数.顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了.如下所示 4 个方法名称都为 s ...

随机推荐

  1. A1130 | 中缀表达式、查找根节点

    代码: #include <stdio.h> #include <memory.h> #include <math.h> #include <string&g ...

  2. A*G/C011

    A*G/C011 A Airport Bus 不会zbl/kk B Colorful Creatures 枚举每个开始的点直接倍增 我好像sb了,可行的是一段前缀所以可以直接2分 C Squared ...

  3. JMeter的基本使用

    什么是Jmeter JMeter是Apache基于Java开发的压力测试工具,通俗的说,你想知道你的接口有多猛,你的服务器是否耐揍,这个家伙可以用数据告诉你.原来学过JMeter的基本使用,发现想不起 ...

  4. ubuntu14.04 安装python3.7

    下载源码:https://www.python.org/downloads/release/python-373/ 一.先安装需要的包zlib1g,libffisudo apt-get update ...

  5. shell 只读变量

    test.sh: #!/bin/bash myUrl="http://www.google.com" readonly myUrl myUrl="http://www.r ...

  6. 【Beta】Scrum meeting 9

    目录 写在前面 进度情况 任务进度表 Beta-1阶段燃尽图 遇到的困难 照片 commit记录截图 文档集合仓库 后端代码仓库 技术博客 写在前面 例会时间:5.13 22:30-22:45 例会地 ...

  7. JetBrains套装免费学生授权申请(IntelliJ, ReSharper, WebStorm...)

    IntelliJ作为一款强大的Java开发IDE,售价自然也不会低.但是对于学生或教师来说,JetBrains开发工具免费提供给学生和教师使用.而且取得一次授权后只需要使用相同的 JetBrains ...

  8. SpringBoot(十六):SpringBoot2.1.1集成fastjson,并使用fastjson替代默认的MappingJackson

    springboot2.1.1默认采用的json converter是MappingJackson,通过调试springboot项目中代码可以确定这点.在springboot项目中定义WebMvcCo ...

  9. Windows系统中CreateFileMapping实现的共享内存及用法

    在32位的Windows系统中,每一个进程都有权访问他自己的4GB(232=4294967296)平面地址空间,没有段,没有选择符,没有near和far指针,没有near和far函数调用,也没有内存模 ...

  10. Camtasia如何录制小文件视频

      Camtasia 录制设置   FrameRate设成4就行,音频格式:PCM, 8000Hz, 8 位, 单声道, 7KB/秒 ,这样更小.   文章来源:刘俊涛的博客 欢迎关注公众号.留言.评 ...