实现类的多态性,方法的重写和重载

1.多态性是面向对象程序设计的重要部分。在Java语言中,通过使用方法的重载和重写实现类的多态性。

2.重写(覆盖)是指父子类之间的关系,当子类继承父类中所有可能被子类访问的成员方法时,如果子类的方法名与父类的方法名相同,那么子类就不能继承父类的方法,这时,称为子类的方法重写了父类的方法。重写体现了子类补充或者改变父类方法的能力。通过重写,可以使一个方法在不同的子类中表现出不同的行为。多态其实不依赖具体类,依赖抽象类和接口,接下来附上一个例子:

目录结构:


Animal.java文件:

package tom.bean;

/*
 * 定义一个动物类,作为父类
 */
public class Animal {
	public Animal(){	//无参构造方法
	}
	
	public void eat(){	//eat()方法
		System.out.println("动物吃东西");
	}
}


Dog.java文件:

package tom.bean;

/*
 * 定义一个狗类,作为动物类的子类,继承动物类
 */
public class Dog extends Animal{
	public Dog(){	//无参构造方法
	}
	
	public void eat(){	//eat()方法,重写了Animal类的eat()方法
		System.out.println("狗吃狗粮");
	}
}


Cat.java文件:

package tom.bean;

/*
 * 定义一个猫类,作为动物类的子类,继承动物类
 */
public class Cat extends Animal{
	public Cat(){	//无参构造方法
	}
	
	public void eat(){	//eat()方法,重写了Animal类的eat()方法
		System.out.println("猫吃猫粮");
	}
}

Tiger.java文件:

package tom.bean;

/*
 * 定义一个Tiger老虎类,继承Animal动物类
 */
public class Tiger extends Animal {
}



Test.java文件,测试类:

package tom.test;

import tom.bean.Cat;
import tom.bean.Dog;
import tom.bean.Tiger;

/*
 * 测试类,打印输出信息
 */
public class Test {
	public static void main(String[] args){
		Dog dog=new Dog();//创建Dog类的对象
		System.out.println("执行dog.eat();语句后的结果:");
		dog.eat();//调用eat()方法
		Cat cat=new Cat();//创建Cat类的对象
		System.out.println("执行cat.eat();语句后的结果:");
		cat.eat();//调用eat()方法
		Tiger tiger=new Tiger();//创建Tiger对象
		System.out.println("执行tiger.eat();语句的结果:");
		tiger.eat();//调用eat()方法,此时调用的是父类的eat()方法
	}
}


运行Test.java文件后,结果为:

从上面的例子可以知道,Dog类和Cat类都重写了父类的eat()方法,所以执行的是子类的eat()方法,但是Tiger类没有重写父类的方法,所以执行的是父类中的eat()方法。

3.方法的重载是指在一个类中出现多个方法名相同,但参数个数或参数类型不同的方法,则称为方法的重载。Java语言在执行该具有重载关系的方法时,将根据调用参数的个数和类型区分具体执行的是哪个方法。下面给出一个例子:定义一个Shape类,在类中定义两个名称为getArea()的方法(参数个数不同)和两个名称为draw()的方法(参数类型不同):

Shape.java文件:

package tom.bean;

public class Shape {
	final float PI=3.14159f;//定义一个用于表示圆周率的常量PI
	
	public float getArea(float r){	//定义一个用于计算面积的方法getArea(),求圆形的面积
		float area=PI*r*r;
		return area;
	}
	
	public float getArea(float length,float width){	//重载getArea()方法,用来求矩形的面积,重载方法带的参数个数不同
		float area=length*width;
		return area;
	}
	
	//画任意形状的图形
	public void draw(int num){	//定义一个用于画图的方法draw()
		System.out.println("画一个"+num+"个任意形状的图形");
	}
	
	//画指定形状的图形
	public void draw(String shape){	//重载draw()方法,重载方法中带的参数类型不同
		System.out.println("画一个"+shape);
	}
	
	//主方法
	public static void main(String[] args){
		Shape shape=new Shape();//创建Shape类的对象
		float l=10;//声明一个常量,初始化为10,表示矩形的长
		float w=20;//声明一个常量,初始化为20,表示矩形的宽
		float rectangleArea=shape.getArea(l, w);//获得矩形的面积,并赋予rectangleArea
		System.out.println("长度为"+l+",宽度为"+w+"的矩形面积为:"+rectangleArea);//打印输出矩形的面积
		float r=5;
		float circleArea=shape.getArea(r);
		System.out.println("半径为"+r+"的圆形的面积为:"+circleArea);
		shape.draw(3);//调用draw()方法
		shape.draw("圆锥");
	}
}

运行此程序,结果为:

 

注:重载的方法直接并不一定必须有联系,但是为了提高程序的可读性,一般只重载功能相似的方法,在进行方法的重载时,方法返回值的类型不能作为区分方法的标志!

4.以上就是通过方法的重写和重载实现类的多态性,仅供大家学习参考,写得不好,请见谅,如有错误请指出,谢谢!


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值