Java回顾——重载和重写的区别

重写(Override),也叫覆盖,是子类方法对父类方法的重新定义;
重载(Overload),同一类中同名方法拥有不同类型或个数的参数列表;
重载和重写的区别:

方法重写方法重载
范围子类同一类中
返回类型相同无关
名称相同相同
参数相同不同
访问权限子类大于等于父类无关
被static修饰不可以可以

先摆个表,我们一项一项说:

范围

方法重写(Override):是子类重写或叫覆盖掉父类的方法,存在于继承关系的子类中;
方法重载(Overload):是存在于同一类中,同名方法之间的关系。

返回类型

方法重写(Override):子类中的方法也是就重写的方法必须要和父类的方法返回类型相同,或者返回父类方法返回类型的子类;
方法重载(Overload):和返回类型没得关系。

名称

方法重写和方法重载的名称必须完全相同,这点两者是一样的。
顺便提一下:

  • 构造方法不能重写。(可以这样理解:因为构造方法的方法名必须和类名一样,和父类和子类的类名肯定是不同的。)
  • 构造方法可以重载。(参数类型或者个数不同就成)

参数

方法重写(Override):参数的类型和个数必须一模一样。
方法重载(Overload):参数的类型或个数至少要有一个不一样。

访问权限

方法重写(Override):子类函数(重写的方法)的访问权限必须大于等于父类。
方法重载(Overload):和访问权限没得关系的。

被static修饰

方法重写(Override):被static修饰的方法是不能被重写的。只能被继承,不能被重写,加@Override注解编译会报错。
方法重载(Overload):可以被重载,没得影响的。

举两个例子:

重写/覆盖(Override):
//父类A
class A{
	public void say(){
		System.out.println("A");
	} 
}
//子类B继承A
class B extends A{
	//重写A中方法
	public void say(){
		System.out.println("B");
	}
}
//访问权限大于等于(此处相等),返回类型相同,函数名相同,方法体不同

重写就是子类重写父类方法的方法体,其它不变。

重载(Overload):
public String() {
    this.value = "".value;
}
public String(String original) {
    this.value = original.value;
    this.hash = original.hash;
}
public String(char value[]) {
    this.value = Arrays.copyOf(value, value.length);
}

我找了一个String类的构造方法的重载,重载只有两个要求:
1、方法名相同;
2、参数类型或个数不同(类型不同、个数不同或都不同);
其它都没得关系的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值