Java方法重载与方法重写

1、方法重载(@overload)

java中,同一个类中出现了相同名字的方法,称为方法重载。

规则:两同一不同(无其他要求,比如返回值、修饰符等均可相同或不同)

  • 同一个类中、方法名相同
  • 形参列表不同(形参个数不同、形参类型不同)

在java重载一文中有详细介绍。

2、方法重写(@override)

java中,子类中包含与父类同名的方法,称为方法重写。

规则:两同两小一大

  • 方法名相同、形参列表相同
  • 子类方法的返回值类型需小于等于父类方法的返回值、子类声明抛出的异常需小于等于父类声明抛出的异常
  • 子类方法的访问权限应大于等于父类方法的访问权限
尤其注意:被重写的方法要么都是类方法、要么都是实例方法,不能一个是类一个是实例
class Base{
	public static void info() {
		//类方法
	}
}
public class t extends Base {
//方法重写错误,因为在父类中info是类方法,但是子类中是实例方法
	public void info() {
	}
}

如果父类中的方法被private修饰,那么此时子类无法访问该方法,如果在子类中出现与父类相同名字的方法,这不是方法重写,只是在子类中定义了一个新的方法。此时这两个同名的方法可以一个是类方法,一个是实例方法。

class Base{
//类方法,并且不能被子类访问
	private static void info() {
	}
}
public class t extends Base {
//不是方法重新,只是在子类中定义了一个新的方法
	public void info() {
	}
}

如何在子类中调用被子类重写的父类方法? 使用Super限定

子类重写了父类的方法,那么子类的对象将无法访问父类中被子类覆盖的方法,但可以使用super(实例方法)、类名(类方法)来调用该父类方法。

class Base{
	int age;
	//父类的info方法
	public void info() {
		System.out.println("Hello world");
	}
}
class Sub extends Base{
	//方法重写
	public void info() {
		System.out.println("Hello China");
	}
	//子类的新方法,在该方法中,想要调用父类的info方法,因此需要使用super限定,如果没有super,则默认是调用子类的info方法,则输出的是:Hello China
	public void fun() {
		super.info();
	}
}
public class t{
	public static void main(String[] args) {
		Sub s=new Sub();
		s.info();
		s.fun();
	}
}

输出结果:Hello China
Hello world

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章