方法的重载,重写,它们的区别

一. 首先,让我们谈一下方法的重载。
1.重载的概念
方法重载是让类以统一的方式处理不同类型数据的一种手段。
要实现方法重载必须满足的条件是:
1.方法的名字必须要完全相同
2.方法所带的参数个数或参数类型或参数的顺序要不同。
简单来说,Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
当我们调用方法时通过传递给它们的不同参数个数和参数类型或者参数个数来决定具体使用哪个方法, 这也就是多态性。
2.需要注意的是:重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。
无法以返回型别作为重载函数的区分标准。这是需要特别强调的地方。
下面我们通过一个具体的简单例子来看一下方法的重载究竟是怎么一回事。
定义一个Calculate类,求圆和矩形的面积,代码如下

public class Calculate {
	//定义一个可以表示圆周率的常量PI
	//在关键字里我们已经说过了,final成员变量表示常量只能被赋值一次,赋值后值不再改变
	public final float PI=3.14159f;
	//求圆形的面积
	//定义一个用于计算面积的方法getArea()
	public float getArea(float r){
		//将圆面积赋给area
		float area = PI*r*r;
		return area;
	}
	
	//求矩形的面积
	//重载getArea的方法
	public float getArea(float c,float k){
		//为变量赋值
		float area = c*k;
		return area;
	}
	public static void main (String [] args){
		//创建calculate类的对象来为其分配内存
		Calculate calculate = new Calculate();
		//为圆的半径赋值
		float r = 8 ;
		float areaCircle=calculate.getArea(r);
		System.out.println("求半径为"+r+"的圆的面积是"+areaCircle);
		//为矩形的长和宽赋值
		float c = 10;
		float k = 20;
		float areaRect = calculate.getArea(c,k);
		System.out.println("求长为"+c+"宽为"+k+"的矩形的面积是"+areaRect);	
	}
}										
 


二. 接下来我们说一下方法的重写
1.重写的概念
方法重写是指在子类中定义的一个方法 ,其名称 、返回类型及参数列表正好与父类中某个方法的名称 、 返回类型及 参数列表相匹配,
那么我们就可以说,子类的方法重写了父类的方法。 

重写方法的规则:
1. 参数列表必须完全与被重写的方法的相同,否则不能称其为 重写而是重载。
2. 返回的类型必须一直与被重写的方法的返回类型相同,否则 不能称其为重写而是重载。 访问修饰符的限制一定要大 于被重写方法的访问修饰符 (public> protected>默认>private)
 
例如:


//创建一个Person类
public class Person {
	private String name;//定义名字属性
	private int age;//定义年龄属性
	public void setName(String name)  {//定义设置名字的方法
		this.name=name;
		}
	public void setAge(int age) {//定义设置年龄的方法
		this.age=age;
		}
	public String getName() {//定义获取名字的方法
		return name;
		}
	public int getAge(){//定义获取年龄的方法
		return age;
		}
	public String getInfo() {return "Name: "+ name + "\n" +"age: "+ age;
	}
}
 
public class Student extends Person {
	private String school;
	public String getSchool()  {
		return school;
		}
	public void setSchool(String school) {
		this.school =school;
		}
	public String getInfo() {
	return  "Name: "+ getName() + "\nage: "+ getAge()+ "\nschool: "+ school;
	}
}
 
public class TestOverWrite {
	public static void main(String arg[]){
	Student student = new Student();
	Person person = new Person();
	person.setName("people");
	person.setAge(100);
	student.setName("John");
	student.setAge(21);
	student.setSchool("CSU");
	System.out.println(person.getInfo());
	System.out.println(student.getInfo());
	}
}
 
输出结果:
Name: people
age: 100
Name: John
age: 21
school: CSU








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值