抽象类接口和包.docx
《抽象类接口和包.docx》由会员分享,可在线阅读,更多相关《抽象类接口和包.docx(13页珍藏版)》请在冰豆网上搜索。
抽象类接口和包
实验9抽象类,接口和包
一、实验目的
1、熟练掌握抽象类abstract的概念。
2、熟练掌握接口interface的概念。
3、熟练包package的概念以及编译运行的方法。
4、熟练掌握内部类innerclass的概念。
5、熟练掌握递归的概念。
6、理解面向对象的程序设计方法。
二、实验内容
(1)定义一个抽象类shape,它包含一个抽象方法getArea(),从shape类派生出rectangle和circle类,这两个类都用getArea()方法计算对象的面积。
编写应用程序使用rectangle和circle类。
要求:
定义rectangle和circle类的构造方法,初始化成员变量
/**
*@(#)Shape.java
*
*
*@authorsolu
*@version1.002009/10/16
*/
publicabstractclassShape{
publicabstractdoublegetArea();
}
classRectangleextendsShape{
privatedoublelenght;
privatedoublewidth;
publicRectangle(doublel,doublew){
lenght=l;
width=w;
}
publicdoublegetArea(){
returnlenght*width;
}
}
classCircleextendsShape{
privatedoubler;
publicCircle(doubler){this.r=r;}
publicdoublegetArea(){
returnMath.PI*Math.pow(r,2.0);
}
}
classAbstractSample{
publicstaticvoidmain(String[]args){
Circlec=newCircle(2.0);
System.out.println("Thecircle'sareais"+c.getArea());
Rectangler=newRectangle(3.1,5.9);
System.out.println("Therectangle'sareais"+r.getArea());
}
}
2)学校中有教师和学生两类人,而在职研究生既是教师又是学生。
设计两个接口studentinterface和teacherinterface。
其中,studentinterface接口包含setFee()getFee()方法,分别用于设置和获取学生的学费;teacherinterface接口包含setPay()和getPay()方法,分别用于设置和获取教师的工资。
定义一个研究生类graduate,实现studentinterface接口和teacherinterface接口,它的成员变量有name,sex,age,fee,pay。
创建一个姓名为“zhangsan”的研究生,统计他的年收入和学费,如果收入减去学费不足2000元,则输出“providealoan”(需要贷款)信息。
要求:
在graduate中实现各个接口定义的抽象方法。
interfaceStudentIterface{
publicabstractvoidsetFee(doublef);
publicabstractdoublegetFee();
}
interfaceTeacherIterface{
publicabstractvoidsetPay(doublep);
publicabstractdoublegetPay();
}
classGraduateimplementsStudentIterface,TeacherIterface{
privateStringname;
privateStringsex;
privateintage;
privatedoublefee;
privatedoublepay;
publicGraduate(Stringn,Strings,inta,doublef,doublep){
name=n;
sex=s;
age=a;
fee=f;
pay=p;
}
publicvoidsetFee(doublef){fee=f;}
publicdoublegetFee(){returnfee;}
publicvoidsetPay(doublep){pay=p;}
publicdoublegetPay(){returnpay;}
publicvoidgetInfo(){
if((pay*12-2*fee)<2000){
System.out.println("Youneedaloan!
");
}
else{
System.out.println("Youpayisenought!
");
}
}
}
publicclassGraduateSample{
publicstaticvoidmain(String[]args){
Graduatezhangsan=newGraduate("ZhangSan","man",20,2500,2000);
zhangsan.getInfo();
}
}
3.编写求解几何图形(如三角形,矩型,圆,多边型)的周长、面积的应用程序,要求用到继承、多态、抽象类、接口、内部类等面向对象程序设计技术的特点。
abstractclasstux
{
protectedStringxz;
publictux(Stringxz)
{
xz=xz;
System.out.print("图形名字:
"+xz);
}
abstractpublicdoublegetzc();
abstractpublicdoublegetmj();
}
classsjxextendstux
{
intc;
intk;
intg;
Stringe="rong";
publicsjx(Stringxz,intc,intg,intk)
{
super(xz);
this.c=c;
this.k=k;
this.g=g;
}
publicdoublegetzc()
{
if((c+k)>g&&(c+g)>k&&(k+g)>c)
{
return(c+k+g);
}
else
return0;
}
publicdoublegetmj()
{
returnjava.lang.Math.sqrt((c*k*g)*(c+k)*(c+g)*(g+k));
}
}
classzfxextendstux
{
intb;
publiczfx(Stringxz,intb)
{
super(xz);
this.b=b;
}
publicdoublegetzc()
{
returnb*4;
}
publicdoublegetmj()
{
returnb*b;
}
}
classyuextendstux
{
doubler;
doublepi=3.14;
publicyu(Stringxz,doubler)
{super(xz);
r=r;
}
publicdoublegetzc()
{
returnpi*(pi*2);
}
publicdoublegetmj()
{
returnpi*r*r;
}
}
classapp
{
publicstaticvoidmain(Stringage[])
{
tuxq=newsjx("三角形",4,5,6);
System.out.println("周长:
"+q.getzc());
System.out.println("面积:
"+q.getmj());
tuxe=newyu("园",7);
System.out.println("周长:
"+e.getzc());
System.out.println("面积"+e.getzc());
tuxp=newzfx("正方形:
",4);
System.out.println("周长:
"+p.getzc());
System.out.println("面积"+p.getmj());
}
}
4.重写上面的程序,要求三角形,矩型,圆,多边型的类放到不同的包中,用包的技术组织程序的设计。
同时要求程序能从键盘上接受数据以便求解不同的几何图形的周长面积。
packagea1;
abstractclasstux
{
protectedStringxz;
publictux(Stringxz)
{
xz=xz;
System.out.print("图形名字:
"+xz);
}
abstractpublicdoublegetzc();
abstractpublicdoublegetmj();
}
packagea1;
classsjxextendstux
{
intc;
intk;
intg;
Stringe="rong";
publicsjx(Stringxz,intc,intg,intk)
{
super(xz);
this.c=c;
this.k=k;
this.g=g;
}
publicdoublegetzc()
{
if((c+k)>g&&(c+g)>k&&(k+g)>c)
{
return(c+k+g);
}
else
return0;
}
publicdoublegetmj()
{
returnjava.lang.Math.sqrt((c*k*g)*(c+k)*(c+g)*(g+k));
}
}
packagea1;
classzfxextendstux
{
intb;
publiczfx(Stringxz,intb)
{
super(xz);
this.b=b;
}
publicdoublegetzc()
{
returnb*4;
}
publicdoublegetmj()
{
returnb*b;
}
}
packagea1;
classyuextendstux
{
doubler;
doublepi=3.14;
publicyu(Stringxz,doubler)
{super(xz);
r=r;
}
publicdoublegetzc()
{
returnpi*(pi*2);
}
publicdoublegetmj()
{
returnpi*r*r;
}
}
packagea1;
classapp
{
publicstaticvoidmain(Stringage[])
{
tuxq=newsjx("三角形",4,5,6);
System.out.println("周长:
"+q.getzc());
System.out.println("面积:
"+q.getmj());
tuxe=newyu("园",7);
System.out.println("周长:
"+e.getzc());
System.out.println("面积"+e.getzc());
tuxp=newzfx("正方形:
",4);
System.out.println("周长:
"+p.getzc());
System.out.println("面积"+p.getmj());
}
}