重写重载—重写详细解释
重写重载—重写详细解释
重写
重写发生在运行期间,是子类对父类的允许访问的方法的实现过程进行重新编写
1.方法名、参数列表必须相同,子类方法返回值类型应比父类方法返回值类型更小或相等,抛出的异常范围小于等于 父类,访问修饰符范围大于等于父类。
2.如果父类方法访问修饰符为private/final/static则子类就不能重写该方法,但是被static修饰的方法能够被再次声明。
3.构造方法无法被重写
综上:重写就是子类对父类方法的重新改造,外部样子不能改变,内部逻辑可以改变。
注意:
方法的重写要遵循“两同两小一大”
“两同”:即方法名相同、形参列表相同 。
“两小”:指的是子类方法返回值类型应比父类方法返回值类型更小或相等。子类方法声明抛出的异常类应比父类方法声明抛出的异总类更小或相等 。
“一大”:指的是子类方法的访问权限应比父类方法的访问权限更大或相等。
重载
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则:
- 被重载的方法必须改变参数列表(参数个数或类型不一样);
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。
区别
区别点 | 重载方法 | 重写方法 |
---|---|---|
发生范围 | 同一个类 | 子类 |
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可修改 | 子类方法返回值类型应比父类方法返回值类型更小或相等 |
异常 | 可修改 | 子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等 |
访问修饰符 | 可修改 | 一定不能做更严格的限制(可以降低限制) |
发生阶段 | 编译期 | 运行期 |
重写详细解释
对重写第二点进行详细解释
如果父类方法访问修饰符为private/final/static则子类就不能重写该方法,但是被static修饰的方法能够被再次声明
这里会对为什么不能用private/final/static这三个关键字做详细的解释
1、private关键字
private是访问修饰符之一,表示私有的,可以修饰方法和属性,代表这个方法或者属性在本类可以使用,超过这个类之外,就不能使用了。并且private关键字只能修饰内部类,不能修饰外部类。
间接访问private成员变量,就是定义一对儿getter/setter方法,命名规则getXxx/setXxx
因此在上面那两点来看,对于方法来说,要是用private关键字修饰了,就代表在该类中能调用该方法,要是超过这个类了就不能访问了。那么重写发生在父子类中,子类无法知道父类有该方法,就更别说重写父类的方法了。(父亲留了一手,私藏了一部分,不继承给儿子,并且儿子也不知道父亲留了一手)
2、final关键字
我们经常背的
- final修饰类表示类不可以被继承
- final修饰方法表示方法不可以被重写
- final修饰变量,表示变量的值不能被修改(注意,要是修饰的事静态引用变量,他的值是可以修改的,只是他的引用地址不能被修改)
在这里,你可以理解final相当于不动产,你家的不动产,比如房子,应该谁都不可以动用和更改吧,更别说你这个臭弟弟了吧。
3、static关键字
这里再次把重写第二点拿出来看一下,方便你理解,就不用爬楼了。
如果父类方法访问修饰符为private/final/static则子类就不能重写该方法,但是被static修饰的方法能够被再次声明
首先我们理解一下定义、声明、static关键字
声明:就是我们经常性说的java中我们先声明一个变量,在赋值。这就是声明。(必须先定义在赋值,一些基础数据类型的封装类(引用数据类型,你声明了就有默认的默认值赋值。而且我们在实际开发中,也建议能用引用数据类型的时候就多用引用数据类型)
int a; //声明
a=2; //赋值
定义:定义就是上面声明,赋值。这两个就叫做定义。
区别:定义有内存的划分,声明没有。
static关键字:这个关键字就是共用的,被这个关键字修饰了,就代表在权限修饰符允许的范围类,谁都可以使用他,而且被这个static关键字修饰的变量,方法都会打上类这个标签,并且智能运行一次,在类加载的时候,会自动加载被static修饰的变量和方法。这里说重写,特别讲一下被static修饰的方法的一些知识点。static关键字修饰的方法,表示类方法,或者公共方法,前提在权限修饰符允许的范围类,并且调用有两种方式,传统的 对象.方法名(),不建议使用,第二种 类名.方法名()。
那么我们有了这个概念的了解,我们就可以说这个static关键字修饰的方法为什么不能重写该方法了,和为什么可以在子类再次声明了。
你写了两个一模一样的static方法,只是方法体不一样,满足重写的所有要求,就是用了static关键字,一个在父类,一个在子类,但是他们两个并不能构成重写。
理解:你父类的方法属于父类,子类的方法属于子类。你在子类中你理解的 重写了该方法,其实就是对他的再次声明,并且这个方法属于子类。下面代码演示:
说明:不做过多说明。
重写重载—重写详细解释相关推荐
- scala中的算术符重载代码详细解释
overload_exercise.scala代码如下: object Overload_Exercise extends Serializable { //--------------------- ...
- 重写,重载,抽象类,接口,抽象类和接口区别
1.多态之重写,重载 重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数.类型都完全一致时,就称子类中的这个方法重写了父类中的方法. new,virtual,ov ...
- JAVA 重写重载/多态/抽象类/封装/接口/包
重写&重载 重写(override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重载(overloading) 是在一个类里面,方法名 ...
- c++ 重载 重写_Java | 深入理解方法调用的本质(含重载与重写区别)
前言 对于习惯使用面向对象开发的工程师们来说,重载 & 重写 这两个概念应该不会陌生了.在中 / 低级别面试中,也常常会考察面试者对它们的理解(隐约记得当年在校招面试时遇到过): 网上大多数资 ...
- Java基础【之】面向对象编程(封装、继承(extends、方法重写、super)、多态(动态绑定、重载/重写)、代码实现)
Java基础[之]面向对象编程(封装.继承.多态.代码实现) 1.封装 2.继承 2.1.extends 2.2.方法重写 2.3.super 3.多态 3.1.对象的多态.方法的多态 3.2.动态绑 ...
- 面试准备每日五题:C++(八)——重写重载隐藏、vector相关
文章目录 1. 重写.重载和隐藏 2. 链表和数组有什么区别 3. vector的底层原理 4. vector的reserve和resize 5.vector迭代器失效的情况 1. 重写.重载和隐藏 ...
- 面向对象 之重写重载
什么是方法的重写(Override / Overwrite) .重载(Overload)? 方法重写.重载需要满足什么样的条件 ? 重写(Override) 1, 必须要有继承 ! 2, 方法名相同 ...
- java 接口 抽象类 继承 重载 重写 多态
4.1 抽象类 在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的. 同时,抽象类体现了数据抽象的思想,是实现多态的一种机制.它定义了一组抽象的方法, ...
- 异常概述、常见异常 、自定义异常 、重载重写的异常区别
1.异常概述 程序运行过程中任何打断程序正常流程的情况称为异常或错误.比如:文件打不开.网络中断.操作符越界.类加载找不到等. Java程序在执行过程中所发生的异常事件可分为两类: ...
最新文章
- ArduinoYun快速入门教程第1章ArduinoYun概览
- Unable to open the physical file XXX.mdf
- Linux学习第十篇之用户管理命令useradd、passwd、who、w
- JQuery EasyUI 动态隐藏
- 躁动的小Z 最短路+路径记录
- CodeForces - 468C Hack it!(构造+数位dp)
- 关于Windows平台下安装mysql软件
- 使用 Apache Pig 处理数据5
- 肺功能曲线图怎么看_【家装干货】有人说是鸡肋,有人说是功能升级,卫生间装双人洗漱台,你怎么看?...
- as cast float server sql_面试常考!SQL行转列和列转行
- javascript-字符串操作
- PostGreSQL(1)-源码安装
- minigui大号字体的实现,即ttf库的使用【转】
- textfield获取其中内容_冲压工艺流程,常见冲压缺陷及消除方法,46页内容全面介绍冲压...
- 为什么有的人开车舍不得开空调?车载空调耗油吗?
- 【数据蒋堂】第46期:大数据集群该不该透明化?
- 超全必读!事件抽取综述(上)
- 杭电ACM2000题
- Obsidan之数学公式的输入
- 我开源了一个私人云盘——蓝眼云盘