实验五 包、接口和抽象类
【实验目的】
1.了解Java 中包(package)、接口(interface)和抽象类的作用。
2.掌握包、接口、抽象类的设计方法。
【实验要求】
1. 了解Java 系统包的结构。
2. 掌握创建自定义包的方法。
3. 掌握使用系统接口的技术和创建自定义接口的方法。
【实验步骤】
一.了解并使用Java 的系统包
1. API 包、接口、异常处理的作用
包是类和接口的集合。利用包可以把常用的类或功能相似的类放在一个包中。Java 语言提供系统包,其中包含了大量的类,可以在编写Java 程序时直接引用它们。所有Java API 包都以“java.”开头,以区别用户创建的包。接口解决了Java 不支持多重继承的问题,可以通过实现多个接口达到与多重继承相同的功能。处理程序运行时的错误和设计程序同样重要,只有能够完善处理运行时出错的程序,软件系统才能长期稳定地运行,异常处理就是说明如何处理程序运行时出错的问题。
二.创建并使用自定义包
1.自定义包的声明方式
<package> <自定义包名>
声明包语句必须添加在源程序的第一行,表示该程序文件声明的全部类都属于这个包。
2.创建自定义包Mypackage
在存放源程序的文件夹中建立一个子文件夹Mypackage。例如,在“E:\javademo”文件夹之
中创建一个与包同名的子文件夹Mypackage(E:\javademo\Mypackage),并将编译过的class 文件放入该文件夹中。注意:包名与文件夹名大小写要一致。再添加环境变量classpath 的路径,例如:D:\java\JDK1.6及以上\lib; E:\javademo
3.在包中创建类
(1)抽象类的使用YMD.java 程序功能:在源程序中,首先声明使用的包名Mypackage,然后创建YMD 类,该类具有计算今年的年份,可以输出一个带有年月日的字符串的功能。
(2)编写YMD.java 文件,源代码如下。
package Mypackage; //声明存放类的包
import java.util.*; //引用java.util 包
public class LX5_1_YMD {
private int year,month,day;
public static void main(String[] arg3){}
public LX4_1_YMD(int y,int m,int d) {
year = y;
month = (((m>=1) & (m<=12)) ? m : 1);
day = (((d>=1) & (d<=31)) ? d : 1);
}
public LX5_1_YMD() {
this(0,0,0);
}
public static int thisyear() {
Instance().get(Calendar.YEAR);//返回当年的年份
}
public int year() {
return year;//返回年份
}
public String toString(){
return year+"-"+month+"-"+day;//返回转化为字符串的年-月-日
}
}
(3)编译LX5_1_YMD.java 文件,然后将LX5_1_YMD.class 文件存放到Mypackage 文件夹中。
3.编写使用包Mypackage 中LX4_1_YMD 类的程序
(1)LX5_2.java 程序功能:给定某人姓名与出生日期,计算该人年龄,并输出该人姓名,
年龄,出生日期。程序使用了LX4_1_YMD 的方法来计算年龄。
(2)编写LX4_2.java 程序文件,源代码如下。
import Mypackage.LX5_1_YMD; //引用Mypackage 包中的LX5_1_YMD 类
public class LX5_2
{
private String name;
private LX5_1_YMD birth;
public static void main(String args[])
{
LX5_2 a = new LX5_2("张驰",1990,1,11);
a.output();
}
public LX5_2(String n1,LX5_1_YMD d1)
{
name = n1;
birth = d1;
}
public LX5_2(String n1,int y,int m,int d)
{
this(n1,new LX5_1_YMD(y,m,d));//初始化变量与对象
}
public int age() //计算年龄
{
return LX5_1_YMD.thisyear() - ar(); //返回当前年与出生年的差即年龄
}
public void output()
{
System.out.println("姓名 : "+name);
System.out.println("出生日期: "+String());
System.out.println("今年年龄 : "+age());
}
}
(3)编译并运行程序,结果如图1所示。
图1
三.使用接口技术
1.接口的定义与作用
接口可以看作是没有实现的方法和常量的集合。接口与抽象类相似,接口中的方法只是做了声明,而没有定义任何具体的操作方法。使用接口是为了解决Java 语言中不支持多重继承的问题。
(1)定义一个接口Shape2D,利用它来实现二维的几何形状类Circle和Rectangle 面积计算编写实现接口的程序文件
(2)源代码:。
interface Shape2D{ //定义Shape2D接口
final double pi=3.14; //数据成员一定要初始化
public abstract double area(); //抽象方法,不需要定义处理方式
}
class Circle implements Shape2D{
double radius;
public Circle(double r){ //构造方法
radius=r;
}
public double area(){
return (pi * radius * radius);
}
}
class Rectangle implements Shape2D{
int width,height;
public Rectangle(int w,int h){ //构造方法
width=w;
height=h;
}
public double area(){
return (width * height);
}
}
public class InterfaceTester {
public static void main(String args[]){
Rectangle rect=new Rectangle(5,6);
System.out.println("Area of rect = " + rect.area());
Circle cir=new Circle(2.0);
System.out.println("Area of cir = " + cir.area());
}
}
【完成实验项目】
1.定义一个抽象基类Shape,它包含三个抽象方法center()、diameter()、getArea(),从Shape类派生出Square和Circle类,这两个类都用center()计算对象的中心坐标,diameter()
计算对象的外接圆直径,getArea()方法计算对象的面积。编写编写应用程序使用Rectangle类和Circle类。
2.定义一个接口Insurance,接口中有四个抽象方法:public int getPolicyNumber()—获取保单号;public int getCoverageAmount()—获取保险总额;public double calculatePremium()—计算保险费;public Date getExpiryDate()—获得有效期。设计一个类Car,该类实现接口的方法,编写应用程序。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论