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. Mysql配置C3P0

    需要导入的包 c3p0-0.9.5.2.jar mchange-commons-0.2.15.jar mysql-connector.jar 1. 配置xml 创建c3p0-config.xml文件, ...

  2. Json提取器(Json Extractor)

    Variable names:保存的变量名,后面使用${Variable names}引用 JSON Path  expressions:调试通过的json path表达式 Match Numbers ...

  3. Kafka的基本概念

    Kafka的前身是由LinkedIn开源的一款产品,2011年初开始开源,加入了 Apache 基金会,2012年从 Apache Incubator 毕业变成了 Apache 顶级开源项目. Top ...

  4. Anniversary party(hdu1520)(poj2342)题解

    原题地址:http://poj.org/problem?id=2342 题目大意: 上司和下属不能同时参加派对,求参加派对的最大活跃值. 关系满足一棵树,每个人都有自己的活跃值(-128~127) 求 ...

  5. 【LG3582】[POI2015]KIN

    [LG3582][POI2015]KIN 题面 洛谷 题解 这题维护区间的信息有点像最大子段和,我们往最大子段和上面靠. 对于一个颜色,我们有一个直观的想法就是将它一次出现的权值设为正,二次出现就设为 ...

  6. 洛谷P4735题解

    若想要深入学习可持久化0-1Trie树,传送门. Description: 给定数列 \(\{a_n\}\) ,支持两种操作: 在数列尾添加一个数 \(x\) ,数列长度变成 \(n+1\) ; 给定 ...

  7. 一个半吊子PM的反思

    故事之源 2019年3月,也就是2016级计算机学院的大三时,软件工程这门课程由选修转为专业必修课,而七个葫芦娃共聚罗杰老师的课堂,组成葫芦娃不想写代码小分队.面临着继承往届项目.完成指定项目和自选项 ...

  8. portaudio使用笔记《转》

    原文链接:https://blog.csdn.net/gg_simida/article/details/77185755 介绍 PortAudio是一个免费.跨平台.开源的音频I/O库.看到I/O可 ...

  9. SNPsnap | 筛选最佳匹配的SNP | 富集分析 | CP loci

    一个矛盾: GWAS得到的SNP做富集分析的话,通常都会有强的偏向性. co-localization of GWAS signals to gene-dense and high linkage d ...

  10. How to Install Ruby on CentOS/RHEL 7/6

    How to Install Ruby on CentOS/RHEL 7/6 . Ruby is a dynamic, object-oriented programming language foc ...