多态编程应用实验

一、实验目的

1.掌握多态的概念和分类

2.掌握重载、重写的使用

3.掌握内部类的使用方法

二、实验硬、软件环境

Windows计算机和Eclipse软件

三、实验内容及步骤

1. 请使用多态实现主人领养宠物并与宠物玩耍。如下图所示编程实现宠物领养系统。

 

代码及运行结果如下:

父类:package test2;
public interface Pet {
void name();
void health();
void love();}
子类:
狗:package test2;
public class Dog implements Pet {
   public void name() {
	System.out.print("宠物的自我介绍:\n我的名字是:小小");}
   public void health() {
		System.out.print("  健康值是:99");}
   public void love() {
		System.out.print("  和主人的亲密度是:80");}}

企鹅:
package test2;
public class Penguin  implements Pet {
	 public void name() {
	System.out.print("宠物的自我介绍:\n我的名字是:泡芙");}
   public void health() {
		System.out.print("  健康值是:96");}
   public void love() {
		System.out.print("  和主人的亲密度是:85");}}

金刚狼:
package test2;
public class Wolf implements Pet {
	 public void name() {
		System.out.print("宠物的自我介绍:\n我的名字是:金刚");}
		   public void health() {
				System.out.print("  健康值是:89");}
		   public void love() {
				System.out.print("  和主人的亲密度是:87");
}
}

测试类:
package test2;
import java.util.Scanner;
public class test实验七1 {
public static void main(String[] args) {
		// TODO Auto-generated method stub
	Scanner sc =new Scanner(System.in);		System.out.println("**************************"); 
System.out.println("宠物领养系统");
	System.out.println("领养类型:\n1.宠物狗\n2.宠物企鹅\n3.宠物金刚狼");
		System.out.println("**************************");
		System.out.println("请选择:");
		int n =sc.nextInt();
		if(n==1) {
			System.out.println("宠物狗");
			Pet d = new Dog();
			d.name();
			d.health();
			d.love();
		}else if(n==2){
			System.out.println("宠物企鹅");
			Pet p = new Penguin();
			p.name();
			p.health();
			p.love();
		}else if(n==3){
			System.out.println("宠物金刚狼");
			Pet w = new Wolf();
			w.name();
			w.health();
			w.love();
}}}

2. 设计一个图形类Shape,包含求面积的area()方法、求周长的perimeter()方法以及设置颜色的SetColor()方法,利用Java多态技术设计其子类Circle(圆形)和Triangle(三角形)类,并分别实现求面积和求周长的方法。

代码及运行结果如下:

父类:
package 实验七;
public class Shape {
	String Color;
	public String SetColor(String a) {
		 Color = a;
		return  Color;}
	public double area() {
		return 0;}
	public double perimeter() {
		return 0;}
	public void show() {
	}	}

子类:
圆形:
package 实验七;
public class Circle extends Shape  {
	final double PI =3.14;
	double r;
	public Circle (double r) {
		super();
		this.r = r;}
	public double area() {
		return PI*r*r;}
	public double perimeter() {
	return PI*r*2;}
	public void show() {
		System.out.println("圆形的面积为:"+
String.format("%.2f",this.area())+
				"  周长为:"+String.format("%.2f",this.perimeter())+
				"  颜色为:"+this.Color);		System.out.println("******************************************");
		}}

三角形:
package 实验七;
public class Triangle  extends Shape{
	double a1,a2,a3,high;
	public Triangle(double a1, double a2, double a3,double high) {
		super();
		this.a1 = a1;
		this.a2 = a2;
		this.a3 = a3;
		this.high =high;}
	public double area() {
		return a1*high*1/2;}
	public double perimeter() {
		return a1+a2+a3;}
	public void show() {
		System.out.println("三角形的面积为:"+
String.format("%.2f",this.area())+
				"  周长为:"+String.format("%.2f",this.perimeter())+
				"  颜色为:"+this.Color);
	}}


测试类:
package 实验七;
import java.util.Scanner;
public  class test2 {
public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
 	System.out.print("请输入圆的半径:");
 	double r = sc.nextDouble();
	Shape c = new Circle(r);
	System.out.print("请输入圆的颜色:");
	String s1 = sc.next();
	c.SetColor(s1);
	c.show();
	System.out.print("请输入三角形的三边长度和高:");
 	double a1 = sc.nextDouble();
 	double a2 = sc.nextDouble();
 	double a3 = sc.nextDouble();
	double high = sc.nextDouble();
	Shape t = new Triangle(a1,a2,a3,high);
	System.out.print("请输入三角形的颜色:");
	String s2 = sc.next();
	t.SetColor(s2);
	t.show();
}	}

 

四、实验结果及分析

1.通过此实验我了解到多态是指不同类的对象在调用同一个方法时所呈现出多种不同行为,实验中的“Pet d = new Dog();”、 Shape c = new Circle(r);都是是父类对象指向子类,为向上转型,在此需注意不可以通过父类变量去调用子类特有的方法;

2.方法重写和方法重载区别为,方法重写的参数列表相同,返回值相同,定义在子夫类中,重载的参数列表不同,定义在同一个类中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值