Java重载(overload)和重写(override)

多态作为面向对象的三大特性之一,她分为编译型多态和运行时多态。其中编译型多态是静态的(静态绑定),即在编译时已经确立了调用哪个方法,主要通过方法重载来实现;运行时多态是动态的(动态绑定),即在程序运行时才能确定调用哪个方法,主要通过方法重写来实现。

重载
同一类中,方法名相同,参数列表不同的函数之间称作重载
参数列表不同指的是:方法的参数个数,参数类型,参数顺序中任意一个的不同,不包括方法的返回类型的不同
重载原则:
1、方法必须在同一个类中
2、方法名必须相同,参数列表必须不同

即以下方法之间构成重载:

public class Person {
	private String name = "";
	private int age;
	
	public void printPersonInfo() {}
	
	public void printPersonInfo(String name) {
		System.out.println("姓名:" + name);
	}
	
	public void printPersonInfo(int age) {
		System.out.println("年龄:" + age);
	}
	
	public void printPersonInfo(String name, int age) {
		System.out.println("姓名:"+name+";年龄:" + age);
	}
}
但以下方法之间不构成方法重载,因为方法之间方法名相同,参数列表也相同,只是返回值和访问控制符不同。

public class Person {
	public void printPersonInfo(String name) {
		System.out.println("姓名:" + name);
	}
	
	private String printPersonInfo(String name) {
		System.out.println("姓名:" + name);
	}
}

重写
父类与子类中的方法的方法名相同,参数列表和返回值也相同的函数之间构成重写,即子类方法对父类方法的重写。
重写原则:
1、重写必须在父子类之间,即子类重写父类的方法
2、子类方法的方法名,参数列表和返回值必须与父类方法相同
3、子类重写父类方法时,子类方法的访问权限不能比父类方法的访问权限低。
4、父类final方法,构造方法,私有方法不能被重写(父子类不在同一包时,子类不能重写父类的默认方法)
5、父类static方法不能被重写,只能被重新定义(static方法属于类方法不属于任何一个对象)

如下,子类对父类方法的重写:
public class Person {
	protected void fun1(String name) {
		System.out.println("姓名:" + name);
	}
	
	public static void fun2(){}
}
public class Manager extends Person {
	//重写父类fun1()方法,访问控制符不能比父类的protected权限小,返回值,方法名和参数列表必须与父类一致
	public void fun1(String name) {
		System.out.println("姓名:" + name);
	}

	//方法的重新定义,而不是重写父类的fun2()方法
	public static void fun2(){}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值