一、实验目的
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.方法重写和方法重载区别为,方法重写的参数列表相同,返回值相同,定义在子夫类中,重载的参数列表不同,定义在同一个类中。