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

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

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

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

范围

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

返回类型

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

名称

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

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

参数

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

访问权限

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

被static修饰

方法重写(Override):被static修饰的方法是不能被重写的。因为一旦被static修饰,会随着类的加载而加载,子父类关系中,运行哪一个?
方法重载(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、参数类型或个数不同(类型不同、个数不同或都不同);
其它都没得关系的。

猜你喜欢

转载自blog.csdn.net/weixin_43622082/article/details/86665811