2021-04-26

实验七  多态编程应用

一、实验目的

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

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

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

二、实验硬、软件环境

Windows计算机和Eclipse软件

三、实验内容及步骤

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

(1)  首先创建一个宠物类Pet,并创建一个方法:

    public class Pet {

      public Pet way(Pet pet){

         return pet;

      }

}

  1. 分别创建狗类Dog,企鹅类Penguin,金刚狼类Wolverine来继承宠物Pet类并重写方法:

    public class Dog extends Pet{

      @Override

      public Pet way(Pet pet) {

        System.out.println("您领养到了一只宠物狗,陪狗狗去接飞盘.");

        return pet;

      }

}

    public class Penguin extends Pet{

       @Override

       public Pet way(Pet pet) {

           System.out.println("您领养到了一只企鹅,陪企鹅去水里游泳.");

           return pet;

       }

}

public class Wolverine extends Pet{

    @Override

    public Pet way(Pet pet) {

        System.out.println("您领养到了一只金刚狼,陪金刚狼去打架.");

        return pet;

    }

}

  1. 创建主人类Master,写入领养宠物的方法:

public class Master {

    public Pet lingyang(Pet pet){

        Pet p=null;

        if (pet instanceof Dog){

            pet.way(p);

            p=pet;

        }else if (pet instanceof Penguin){

            pet.way(p);

            p=pet;

        }else if (pet instanceof Wolverine){

            pet.way(p);

            p=pet;

        }

        return p;

    }

}

(4)新建一个ChongWuLingYang类来使用上面的类:

    import java.util.Scanner;

public class ChongWuLingYang {

      public static void main(String[] args) {

        Scanner sc=new Scanner(System.in);

        Master m=new Master();

        Pet P1=new Dog();

        Pet P2=new Penguin();

        Pet P3=new Wolverine();

        System.out.println("********************");

        System.out.println("宠物领养系统");

        System.out.println("领养的类型:");

        System.out.println("1、宠物狗");

        System.out.println("2、宠物企鹅");

        System.out.println("3、宠物金刚狼");

        System.out.println("********************");

        System.out.print("请选择:");

        int a=sc.nextInt();

        if (a==1){

            m.lingyang(P1);

        }else if (a==2){

            m.lingyang(P2);

        }else if (a==3){

            m.lingyang(P3);

        }

      }

}

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

(1)设计一个图形类Shape,包含求面积的area()方法、求周长的perimeter()方法以及设置颜色的SetColor()方法:

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(){

    }

}

  1. 设计其子类Circle(圆形)类:

    public class Circle extends Shape{

      final double PI=3.14;

      double  r;

      public Circle(double r){

          super();

          this.r=r;

      }

      @Override

      public double area(){

          return PI*r*r;

      }

      @Override

      public double perimeter(){

          return 2*PI*r;

      }

      public void show(){

          System.out.println("该圆的面积为:"+String.format("%.2f",this.area())+

                           "  周长为:"+String.format("%.2f",this.perimeter())+

                           "  颜色为:"+this.color);

      }

}

  1. 设计其子类Triangle(三角形)类:

    public class Triangle extends Shape{

      double a;

      double b;

      double c;

      public Triangle(double a,double b,double c){

          super();

          this.a=a;

          this.b=b;

          this.c=c;

      }

      @Override

      public double area(){

          double s=(a+b+c)/2;

          return Math.sqrt(s*(s-a)*(s-b)*(s-c));

      }

      @Override

      public double perimeter(){

          return a+b+c;

      }

      @Override

      public void show(){

          System.out.println("该三角形的面积为:"+String.format("%.2f",this.area())+

                           "  周长为:"+String.format("%.2f",this.perimeter())+

                           "  颜色为:"+this.color);

      }

}

  1. 新建MianjiZhouchang类来使用以上类:

    import java.util.Scanner;

public class MianjiZhouchang {

     public static void main(String[] args) {

        Scanner sc=new Scanner(System.in);

        System.out.print("请输入圆的半径:");

        double r = sc.nextDouble();

        Shape cir=new Circle(r);

        System.out.print("请输入圆的颜色:");

        String yan1=sc.next();

        cir.SetColor(yan1);

        cir.show();

        System.out.println("请分别输入三角形的三边:");

        double a=sc.nextDouble();

        double b=sc.nextDouble();

        double c=sc.nextDouble();

        Shape tri=new Triangle(a,b,c);

        System.out.print("请输入三角形的颜色:");

        String yan2=sc.next();

        tri.SetColor(yan2);

        tri.show();

     }

}

  • 实验结果及分析

    实验结果

      实验分析

      通过本次实验,掌握了多态的概念和分类,重载、重写的使用以及内部类的使用方法。多态是具有表现多种形态的能力。多态就是一个接口,使用不同的实例而执行不同的操作。方法重载有两层含义。第一层含义:即在一个类中通过多种形式完成同一行为。第二层含义:方法重载又叫编译时多态,即在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法。方法重写有两层含义。第一层含义:指在父类中定义的属性或方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为。第二层含义:方法重写又叫运行时多态,即在Java代码运行时,系统根据调用该方法的实例,决定调用哪个方法。在类中定义的类称为内部类。内部类呢可分为静态内部类、非静态内部类和匿名内部类三种。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

——风吹花落——

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值