实验八 接口与类的多态
一、实验时间: 姓名: 学号: 二、 实验目的
1、 理解接口的作用;
2、 掌握接口的定义方式; 3、 掌握接口的继承;
4、 掌握通过类来实现接口; 5、 理解并掌握类的多态;
三、知识点
1、接口的定义; 2、接口的实现; 3、类的多态
四、实验内容与步骤
1、编写程序为公交车的老人卡、学生卡和普通市民卡类提供收费功能,将收费功能提取,以接口的形式定义,然后被这三种卡类实现。再定义一个刷卡机类,能够对这三类卡进行刷卡操作。最后编写一个测试类,用于测试刷卡机对公交车三类卡的刷卡操作。 //接口
public interface Shuaka { void shoufei();
}
//成人卡
public class AdultCard implements Shuaka {
@Override
public void shoufei() {
// TODO Auto-generated method stub
System.out.println(\收费2元\);
} }
//老人卡
public class OlderCard implements Shuaka { @Override
public void shoufei() {
// TODO Auto-generated method stub
System.out.println(\收费1元\);
} }
//学生卡
public class StudentCard implements Shuaka {
@Override
public void shoufei() {
// TODO Auto-generated method stub
System.out.println(\收费0.6元\);
} }
//刷卡机
public class Shuakamch { void useCard(Shuaka c){ c.shoufei(); }
}
//测试类
public class TestShuka {
public static void main(String[] args) { // TODO Auto-generated method stub Shuaka ac=new AdultCard(); Shuaka oc=new OlderCard(); Shuaka sc=new StudentCard(); Shuakamch skj=new Shuakamch(); skj.useCard(ac); skj.useCard(oc); skj.useCard(sc); } }
2、按照要求实现以下类:
1)编写圆、长方形和三角形的实体类。 2)编写定义计算面积和周长的接口。
3)编写圆、长方形和三角形的业务类来实现接口。
4)编写业务类,计算以圆、长方形和三角形为底面,任意长度为高的立体的体积和表面积。
5)编写测试类,分别计算以半径为2的圆、长宽分别为4,3的长方形,三边分别为5,4,3的三角形为底面,高为5的立体的体积和表面积。
//实体类省略,自己编写 //接口
public interface ShapeCom { double getArea();
double getPerimeter();
}
//圆的业务类
public class CircleCom implements ShapeCom{ private Circle c;
public CircleCom(Circle c){ this.c=c; }
public double getArea(){
return c.getRadius()*Math.PI*c.getRadius(); }
public double getPerimeter(){
return 2*Math.PI*c.getRadius(); }
}
//三角形的业务类
public class TriangleCom implements ShapeCom{ private Triangle t;
public TriangleCom(Triangle t){ this.t=t; }
public double getArea(){ double s,res;
s=(t.getA()+t.getB()+t.getC())/2;
res=Math.sqrt(s*(s-t.getA())*(s-t.getB())*(s-t.getC())); return res; }
public double getPerimeter(){
return t.getA()+t.getB()+t.getC(); }
}
//长方形的业务类
public class RectangleCom implements ShapeCom{ private Rectangle r;
public RectangleCom(Rectangle r){ this.r=r; }
public double getArea(){
return r.getChang()*r.getKuan(); }
public double getPerimeter(){
return 2*(r.getChang()+r.getKuan()); } }
//立体的业务类
public class Liti { private ShapeCom s; private double height;
public Liti(ShapeCom s,double height){