实验七 多态编程应用
一、实验目的
1.掌握多态的概念和分类
2.掌握重载、重写的使用
3.掌握内部类的使用方法
二、实验硬、软件环境
Windows计算机和Eclipse软件
三、实验内容及步骤
1. 请使用多态实现主人领养宠物并与宠物玩耍。如下图所示编程实现宠物领养系统。
(1) 首先创建一个宠物类Pet,并创建一个方法:
public class Pet {
public Pet way(Pet pet){
return pet;
}
}
- 分别创建狗类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;
}
}
- 创建主人类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(){
}
}
- 设计其子类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);
}
}
- 设计其子类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);
}
}
- 新建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代码运行时,系统根据调用该方法的实例,决定调用哪个方法。在类中定义的类称为内部类。内部类呢可分为静态内部类、非静态内部类和匿名内部类三种。