Java的多态

Java的多态跟C++差不多,主要是通过方法的重载和覆盖来实现类的多态性的。

一、方法的重载(overloading)

方法的重载是指在一个类中,出现多个方法名相同,但参数个数货参数类型不同的方法。

例子中同样是一个getArea函数,由于参数个数的不同,返回的分别是圆形、矩形以及梯形的面积。

public class Calculate {
	final float PI = 3.14159f;
	
	public float getArea(float r)
	{
		float area = PI * r * r;
		return area;
	}
	
	public float getArea(float l, float w)
	{
		float area = l * w;
		return area;
	}
	
	public float getArea(float up, float down, float high)
	{
		float area = (up + down) * high / 2;
		return area;
	}
	
	public static void main(String[] args) 
	{
		Calculate c = new Calculate();
		float r = 10;
		float l = 5;
		float w = 4;
		
		System.out.println("半径为10的圆的面积是" + c.getArea(r));
		System.out.println("长为5宽为4的矩形的面积是" + c.getArea(l,w));
		System.out.println("上低为5下底为4高为10的梯形的面积是" + c.getArea(l,w,r));
		
	}
}

运行结果是

半径为10的圆的面积是314.159
长为5宽为4的矩形的面积是20.0
上低为5下底为4高为10的梯形的面积是45.0


二、方法的覆盖(Overriding)

方法的覆盖发生在继承中,当子类继承父类后,如果子类的方法名誉父类的方法名相同,那么子类就不能继承父类的方法,或者说父类重的方法被子类覆盖。

例子中有覆盖了父类Animal的move方法的Bird和Horse,还有没有覆盖父类的dog,还有父类Animal4个类的move函数的结果。

public class Zoo {
	public static void main(String[] args)
	{
		Bird bird = new Bird();
		System.out.println("执行bird的move函数的结果是");
		bird.move();
		Horse horse = new Horse();
		System.out.println("执行horse的move函数的结果是");
		horse.move();
		Dog dog = new Dog();
		System.out.println("执行dog的move函数的结果是");
		dog.move();
		Animal animal = new Animal();
		System.out.println("执行animal的move函数的结果是");
		animal.move();
	}
}

运行结果是

执行bird的move函数的结果是
鸟会飞翔
执行horse的move函数的结果是
马会跑
执行dog的move函数的结果是
动物会运动
执行animal的move函数的结果是
动物会运动


总结:

1、在方法重载中,方法返回值的类型不能作为区分方法重载的标志。

2、在方法覆盖中,需要注意以下几点

(1)子类不能覆盖父类中声明为final或者static的方法。

(2)子类必须覆盖父类中声明为abstract的方法,或者子类也将该方法声明为abstract。

(3)子类覆盖父类中的同名方法时,子类中的声明也必须和父类中被覆盖的方法的声明一样,否则就无法覆盖,而会变成重载,即父类子类的两个函数都存在,根据参数的不同来区分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值