重写重载—重写详细解释

重写重载—重写详细解释

重写

重写发生在运行期间,是子类对父类的允许访问的方法的实现过程进行重新编写

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关键字,一个在父类,一个在子类,但是他们两个并不能构成重写。

理解:你父类的方法属于父类,子类的方法属于子类。你在子类中你理解的 重写了该方法,其实就是对他的再次声明,并且这个方法属于子类。下面代码演示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
说明:不做过多说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值