java实验四对象和类(抽象类、接口与包)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java实验四对象和类(抽象类、接口与包) 实验四对象和类(抽象类、接口与包) 一、实验目的
1、熟练掌握抽象类abstract的概念。
2、熟练掌握接口interface的概念。
3、熟练包package的概念以及编译运行的方法。
4、熟练掌握内部类inner class的概念。
5、熟练掌握递归的概念。
6、理解面向对象的程序设计方法。
二、实验内容与要求
1(编写求解几何图形(如三角形,矩型,圆,多边型)的周长、面积的应用程序,要求用到继承、多态、抽象类、接口、内部类等面向对象程序设计技术的特
点。
程序如下:
abstract class Geometric{ //定义抽象类
abstract double getPerimter();
abstract double getArea(); }
interface MY{ //定义接口
float getarea();
float getperimter();
}
class sanjiaoxing extends Geometric{ //三角形类继承抽象类
private float a;
private float b;
private float c;
sanjiaoxing(float x1,float x2,float x3){
a=x1;b=x2;c=x3;
}
double getPerimter(){
return a+b+c;
}
double getArea(){
float p=(a+b+c)/2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
}
class yuanxing extends Geometric{ //圆类继承抽象类private float radius;
yuanxing(float a){
radius=a;
}
double getPerimter(){
double p;
p=2*3.14f*radius;
return p;
}
double getArea(){
return 3.14f*radius*radius;
}
}
class juxing implements MY{ //矩形类实现接口
private float height;
private float width;
juxing(float a,float b){
height=a;width=b;
}
public float getperimter(){
return 2*(width+height);
}
public float getarea(){
return width*height;
}
}
class abc{
public static void main(String args[]){ sanjiaoxing obj1=new sanjiaoxing(3,4,5); System.out.println("当三角形三边是3,4,5时:"); System.out.println("边长是:"+obj1.getPerimter()); System.out.println("面积是:"+obj1.getArea()); yuanxing obj2=new yuanxing(4);
System.out.println("当圆的半径是4时:");
System.out.println("周长是:"+obj2.getPerimter());
System.out.println("面积是:"+obj2.getArea());
juxing obj3=new juxing(3,4);
System.out.println("当矩形长和宽是3,4时:");
System.out.println("周长是:"+obj3.getperimter());
System.out.println("面积是:"+obj3.getarea());
}
}
结果如下:
, 出现的问题1:需要定义抽象类和接口,并用三角形、矩形和圆形来实现
里边定义的方法。
2、重写上面的程序,要求三角形,矩型,圆,多边型的类放到不同的包中,用包的技术组织程序的设计。
同时要求程序能从键盘上接受数据以便求解不同的几何图形的周长面积。
程序如下:
这是在a包中的三角形类:
package a;
import java.util.Scanner;
public class sanjiaoxing {
float a;
float b;
float c;
public void shuru()
{
Scanner s = new Scanner(System.in); String str = s.next();
String[] arr = str.split("/");
a = Float.parseFloat(arr[0]);
b = Float.parseFloat(arr[1]);
c = Float.parseFloat(arr[2]);
}
public float getPerimter(){
return a+b+c;
}
public double getArea(){
float p=(a+b+c)/2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c)); }
}
这是在b包中矩形的类:
package b;
import java.util.Scanner;
public class juxing {
float height;
float width;
public void shuru()
{
Scanner s = new Scanner(System.in); String str = s.next();
String[] arr = str.split("/"); height = Float.parseFloat(arr[0]); width = Float.parseFloat(arr[1]); }
public float getperimter(){
return 2*(width+height);
}
public float getarea(){
return width*height;
}
}
这是在c包中圆形的类:
package c;
import java.util.Scanner;
public class yuanxing {
float radius;
public void shuru()
{
Scanner s = new Scanner(System.in); String str = s.next();
String[] arr = str.split("/");
radius = Float.parseFloat(arr[0]);
}
public double getPerimter(){
double p;
p=2*3.14f*radius;
return p;
}
public double getArea(){
return 3.14f*radius*radius;
}
}
这是在Tuxing项目中实现程序的代码: import a.sanjiaoxing;
import b.juxing;
import c.yuanxing;
public class Tuxing {
public static void main(String[] args) { sanjiaoxing obj1=new sanjiaoxing(); juxing obj2=new juxing();
yuanxing obj3=new yuanxing();
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:刚开始不知道怎么把各个不同的类放在不同的包中,所以弄了很久,还有一个问题是题目要求程序能从键盘上接受数据以便求解不同的几何图形的周长面积,所以刚开始老师给的程序段看不懂,所以就上网找了另一段代码,即public void shuru()
{
Scanner s = new Scanner(System.in);
String str = s.next();
String[] arr = str.split("/");
a = Float.parseFloat(arr[0]);
b = Float.parseFloat(arr[1]);
c = Float.parseFloat(arr[2]);
}
,(练习ng.Class类的使用,通过一个对象返回一个Class对象,如何获取一个类的名称,如何使用class生成一个类的对象。
获取类的描述信息。
程序如下:
public class abcd
{
public static void main(String arg[]) {
abcd t=new abcd();
Class tc=t.getClass();
String s=tc.getName();
System.out.println("name:"+s); }
}
结果如下:
, 出现的问题1:这个程序是在网上找到的代码,因为不是很明白
ng.Class类的使用,通过一个对象返回一个Class对象。
4(从命令行输入一个正整数,用递归的方法求出每位数字上的累加和程序如下:
import java.util.Scanner;
public class zhengshu{
int n;
public void shuru()
{
Scanner s = new Scanner(System.in);
String str = s.next();
String[] arr = str.split("/");
n = Integer.parseInt(arr[0]);
}
public int jisuan()
{
int s=0,b;
b=n%10;
while(b!=0)
{
b=n%10;
n=n/10;
s=s+b;
}
return s;
}
public static void main(String[] args){
zhengshu obj=new zhengshu();
System.out.println("请输入一个正整数:");
obj.shuru();
System.out.println("各位数相加和是:");
System.out.println(obj.jisuan());
}
}结果如下:
, 出现的问题1:这个程序主要是要明白当从命令行输入的正整数有不一样
的位数,所以就必须要使用循环语句来实现位数的相加。
三、思考题
1(定义一个矩形类Rectangle,再定义接口InterfaceRec,其中包含方法getArea ();
由矩形类派生出一个正方形类,自行扩充成员变量和方法,并实现此接口InterfaceRec中的方法。
答:程序如下:
interface MY{ //定义接口
float getarea();
}
class juxing{ //矩形类
private float height;
private float width;
public float getperimter(){
return 2*(width+height);
}
}
class zheng extends juxing implements MY{ //正方形类继承矩形类和实现接口
private float a1;
public float getarea(){
return a1*a1;
}
public float getperimter(){
return 2*(a1+a1);
}
zheng(float a){
a1=a;
}
public static void main(String args[]){
zheng obj=new zheng(3);
System.out.println("当正方形宽是:3");
System.out.println("周长是:"+obj.getperimter());
System.out.println("面积是:"+obj.getarea());
}
} 2. 内部类inner class和外部类的区别,
答:内部类是存在于某个外部类中,可以将内部类看成是外部类的成员。
3(抽象类和接口的区别,
答:含有抽象方法才是抽象类,抽象类作为父类被继承;而接口里的方法都是抽象方法,所有变量都是static变量,接口可以实现多重继承。
四、实验心得:通过这个实验四,我明白了如何使用接口、抽象、继承和包,
抽象和接口的使用基本差不多,但不一样的是抽象类作为父类被继承;而接口里的方法都是抽象方法,所有变量都是static变量,接口可以实现多重继承,即一个类可以实现多个接口。
继承分为私有继承、保护继承和公有继承,子类可以继承父类里的所有数据成员和成员方法,所以就可以避免重复书写
父类中的数据成员和成员方法,子类中也可以覆盖父类中成员方法。
使用包可以防止类命名的混乱,包可以将类组织成单元,控制包中类、接口、成员变量和方法的可见性,除了类中所有的成员变量和方法可以被同一包中的其他类和方法访问。