java实验四对象和类抽象类接口与包.docx
《java实验四对象和类抽象类接口与包.docx》由会员分享,可在线阅读,更多相关《java实验四对象和类抽象类接口与包.docx(11页珍藏版)》请在冰豆网上搜索。
java实验四对象和类抽象类接口与包
java实验四对象和类(抽象类、接口与包)
实验四对象和类(抽象类、接口与包)一、实验目的
1、熟练掌握抽象类abstract的概念。
2、熟练掌握接口interface的概念。
3、熟练包package的概念以及编译运行的方法。
4、熟练掌握内部类innerclass的概念。
5、熟练掌握递归的概念。
6、理解面向对象的程序设计方法。
二、实验内容与要求
1(编写求解几何图形(如三角形,矩型,圆,多边型)的周长、面积的应用程
序,要求用到继承、多态、抽象类、接口、内部类等面向对象程序设计技术的特
点。
程序如下:
abstractclassGeometric{//定义抽象类
abstractdoublegetPerimter();
abstractdoublegetArea();}
interfaceMY{//定义接口
floatgetarea();
floatgetperimter();
}
classsanjiaoxingextendsGeometric{//三角形类继承抽象类
privatefloata;
privatefloatb;
privatefloatc;
sanjiaoxing(floatx1,floatx2,floatx3){
a=x1;b=x2;c=x3;
}
doublegetPerimter(){
returna+b+c;
}
doublegetArea(){
floatp=(a+b+c)/2;
returnMath.sqrt(p*(p-a)*(p-b)*(p-c));
}
}
classyuanxingextendsGeometric{//圆类继承抽象类
privatefloatradius;
yuanxing(floata){
radius=a;
}
doublegetPerimter(){
doublep;
p=2*3.14f*radius;
returnp;
}
doublegetArea(){
return3.14f*radius*radius;
}
}
classjuxingimplementsMY{//矩形类实现接口
privatefloatheight;
privatefloatwidth;
juxing(floata,floatb){
height=a;width=b;
}
publicfloatgetperimter(){
return2*(width+height);
}
publicfloatgetarea(){
returnwidth*height;
}
}
classabc{
publicstaticvoidmain(Stringargs[]){
sanjiaoxingobj1=newsanjiaoxing(3,4,5);
System.out.println("当三角形三边是3,4,5时:
");
System.out.println("边长是:
"+obj1.getPerimter());
System.out.println("面积是:
"+obj1.getArea());
yuanxingobj2=newyuanxing(4);
System.out.println("当圆的半径是4时:
");
System.out.println("周长是:
"+obj2.getPerimter());
System.out.println("面积是:
"+obj2.getArea());
juxingobj3=newjuxing(3,4);
System.out.println("当矩形长和宽是3,4时:
");
System.out.println("周长是:
"+obj3.getperimter());
System.out.println("面积是:
"+obj3.getarea());
}
}
结果如下:
出现的问题1:
需要定义抽象类和接口,并用三角形、矩形和圆形来实现
里边定义的方法。
2、重写上面的程序,要求三角形,矩型,圆,多边型的类放到不同的包中,用包的技术组织程序的设计。
同时要求程序能从键盘上接受数据以便求解不同的几何图形的周长面积。
程序如下:
这是在a包中的三角形类:
packagea;
importjava.util.Scanner;
publicclasssanjiaoxing{
floata;
floatb;
floatc;
publicvoidshuru()
{
Scanners=newScanner(System.in);
Stringstr=s.next();
String[]arr=str.split("/");
a=Float.parseFloat(arr[0]);
b=Float.parseFloat(arr[1]);
c=Float.parseFloat(arr[2]);
}
publicfloatgetPerimter(){
returna+b+c;
}
publicdoublegetArea(){
floatp=(a+b+c)/2;
returnMath.sqrt(p*(p-a)*(p-b)*(p-c));
}
}
这是在b包中矩形的类:
packageb;
importjava.util.Scanner;
publicclassjuxing{
floatheight;
floatwidth;
publicvoidshuru()
{
Scanners=newScanner(System.in);
Stringstr=s.next();
String[]arr=str.split("/");
height=Float.parseFloat(arr[0]);
width=Float.parseFloat(arr[1]);
}
publicfloatgetperimter(){
return2*(width+height);
}
publicfloatgetarea(){
returnwidth*height;
}
}
这是在c包中圆形的类:
packagec;
importjava.util.Scanner;
publicclassyuanxing{
floatradius;
publicvoidshuru()
{
Scanners=newScanner(System.in);
Stringstr=s.next();
String[]arr=str.split("/");
radius=Float.parseFloat(arr[0]);
}
publicdoublegetPerimter(){
doublep;
p=2*3.14f*radius;
returnp;
}
publicdoublegetArea(){
return3.14f*radius*radius;
}
}
这是在Tuxing项目中实现程序的代码:
importa.sanjiaoxing;
importb.juxing;
importc.yuanxing;
publicclassTuxing{
publicstaticvoidmain(String[]args){
sanjiaoxingobj1=newsanjiaoxing();
juxingobj2=newjuxing();
yuanxingobj3=newyuanxing();
System.out.println("请输入三角形三条边:
");
obj1.shuru();
System.out.println("周长是:
"+obj1.getPerimter());
System.out.println("面积是:
"+obj1.getArea());
System.out.println("请输入矩形宽和长:
");
obj2.shuru();
System.out.println("周长是:
"+obj2.getperimter());
System.out.println("面积是:
"+obj2.getarea());
System.out.println("请输入圆的半径:
");
obj3.shuru();
System.out.println("周长是:
"+obj3.getPerimter());
System.out.println("面积是:
"+obj3.getArea());
}
}
结果如下:
出现的问题1:
刚开始不知道怎么把各个不同的类放在不同的包中,所以弄了很久,还有一个问题是题目要求程序能从键盘上接受数据以便求解不同的几何图形的周长面积,所以刚开始老师给的程序段看不懂,所以就上网找了另一段代码,即publicvoidshuru()
{
Scanners=newScanner(System.in);
Stringstr=s.next();
String[]arr=str.split("/");
a=Float.parseFloat(arr[0]);
b=Float.parseFloat(arr[1]);
c=Float.parseFloat(arr[2]);
}
(练习java.lang.Class类的使用,通过一个对象返回一个Class对象,如何获取一个类的名称,如何使用class生成一个类的对象。
获取类的描述信息。
程序如下:
publicclassabcd
{
publicstaticvoidmain(Stringarg[]){
abcdt=newabcd();
Classtc=t.getClass();
Strings=tc.getName();
System.out.println("name:
"+s);}
}
结果如下:
出现的问题1:
这个程序是在网上找到的代码,因为不是很明白
java.lang.Class类的使用,通过一个对象返回一个Class对象。
4(从命令行输入一个正整数,用递归的方法求出每位数字上的累加和程序如下:
importjava.util.Scanner;
publicclasszhengshu{
intn;
publicvoidshuru()
{
Scanners=newScanner(System.in);
Stringstr=s.next();
String[]arr=str.split("/");
n=Integer.parseInt(arr[0]);
}
publicintjisuan()
{
ints=0,b;
b=n%10;
while(b!
=0)
{
b=n%10;
n=n/10;
s=s+b;
}
returns;
}
publicstaticvoidmain(String[]args){
zhengshuobj=newzhengshu();
System.out.println("请输入一个正整数:
");
obj.shuru();
System.out.println("各位数相加和是:
");
System.out.println(obj.jisuan());
}
}结果如下:
出现的问题1:
这个程序主要是要明白当从命令行输入的正整数有不一样
的位数,所以就必须要使用循环语句来实现位数的相加。
三、思考题
1(定义一个矩形类Rectangle,再定义接口InterfaceRec,其中包含方法getArea();
由矩形类派生出一个正方形类,自行扩充成员变量和方法,并实现此接口InterfaceRec中的方法。
答:
程序如下:
interfaceMY{//定义接口
floatgetarea();
}
classjuxing{//矩形类
privatefloatheight;
privatefloatwidth;
publicfloatgetperimter(){
return2*(width+height);
}
}
classzhengextendsjuxingimplementsMY{//正方形类继承矩形类和实现接口
privatefloata1;
publicfloatgetarea(){
returna1*a1;
}
publicfloatgetperimter(){
return2*(a1+a1);
}
zheng(floata){
a1=a;
}
publicstaticvoidmain(Stringargs[]){
zhengobj=newzheng(3);
System.out.println("当正方形宽是:
3");
System.out.println("周长是:
"+obj.getperimter());
System.out.println("面积是:
"+obj.getarea());
}
}2.内部类innerclass和外部类的区别,
答:
内部类是存在于某个外部类中,可以将内部类看成是外部类的成员。
3(抽象类和接口的区别,
答:
含有抽象方法才是抽象类,抽象类作为父类被继承;而接口里的方法都是抽象方法,所有变量都是static变量,接口可以实现多重继承。
四、实验心得:
通过这个实验四,我明白了如何使用接口、抽象、继承和包,
抽象和接口的使用基本差不多,但不一样的是抽象类作为父类被继承;而接
口里的方法都是抽象方法,所有变量都是static变量,接口可以实现多重继
承,即一个类可以实现多个接口。
继承分为私有继承、保护继承和公有继承,
子类可以继承父类里的所有数据成员和成员方法,所以就可以避免重复书写
父类中的数据成员和成员方法,子类中也可以覆盖父类中成员方法。
使用包
可以防止类命名的混乱,包可以将类组织成单元,控制包中类、接口、成员
变量和方法的可见性,除了类中所有的成员变量和方法可以被同一包中的其
他类和方法访问。