实验四 抽象类接口与异常

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四(一)、抽象类、接口

1.实验目的

(1)理解抽象类的意义和实际应用的一般模式,熟练掌握抽象类和抽象方法的定义以及抽象类的继承,尤其是子类是非抽象类的情况。

(2)理解接口的意义、实际应用的一般模式及与抽象类的区别,熟练掌握接的定义以及接口的继承和实现。

2.实验内容和步骤

(1)将实验三中形状类Shape的getArea()改为抽象方法,在不修改四种形状子类和测试类TestShape的基础上,保证执行TestShape 能够得到与实验四同样的结果。

(2)将实验三中形状类Shape改为接口,在不修改测试类TestShape的基础上,保证执行TestShape能够得到与实验三同样的结果。

(3)将附录1添加到工程,调试后保证源程序能编译成功,画出附录1中多个类间的关系图,按以下步骤调试程序。注,以下5步没有先后关系。

①将AbsClass类前面abstract删掉,编译会出现什么结果,为什么?

②将AbsClass类中的abstract void absMethod();改为abstract void absMethod(){},编译会出现什么结果,为什么?

③删除AbsClass类中的absMethod()方法,AbsClass类可否通

过编译?

④将AbsSubClass类前面abstract删掉,编译会出现什么结果,为什么?

⑤将SubClass中的absMethod方法改名为absMethod2,编译会出现什么结果,为什么?

(4)在TestAbsctract的main方法中添加“

SubClass sc=new SubClass();

AbsClass ac=new AbsClass();

”,编译会出现什么结果,为什么?

(5)在TestAbsctract的main方法中添加“

SubClass sc=new SubClass();

AbsClass ac;

”,编译会出现什么结果,为什么?

(6)在TestAbsctract的main方法中添加“

SubClass sc=new SubClass();

AbsClass ac=new SubClass();

AbsClass ac2=sc;

sc.absMethod();

ac.absMethod();

ac2.absMethod();

”,可否通过编译,为什么?

附录1 TestAbsctract.java

abstract class AbsClass{

abstract void absMethod();

void commMethod(){

System.out.println("I am a common method in a abstract class.");

}

}

abstract class AbsSubClass extends AbsClass{

void commMethod3(){

System.out.println("I am a common method in a abstract sub class.");

}

}

class SubClass extends AbsClass{

void absMethod(){

System.out.println("I am a implemented method in a common sub class.");

}

}

public class TestAbstract {

public static void main(String [] args){

}

}

实验四(二)、异常

1.实验目的

(1)理解Java异常处理机制,理解为什么程序设计中需要异常、没有异常之前程序的遇到异常的结果。

(2)掌握Exception的分类,能够分辨哪些异常属于运行时异常,哪些异常属于已检查异常。

(3)掌握异常处理结构try、catch、finally,理解异常出现时和不出现时程序的执行流程。

(4)学会使用throw抛出异常,掌握何时选择处理异常何时选择抛出异常。

(5)学会使用throws声明为可能抛出异常的方法,掌握哪些方法必须声明可能抛出的异常。

2.实验内容和步骤

(1)比较附录1、附录2、附录3中的程序有何异常,分析运行的结果有何不同,再编译运行它们验证你的想法。

(2)将附录3中main函数后面的“t hrows Exception”去掉再编译会怎么样,为什么?

(3)在实验二中曾经实现过日期类MyDate,它包含一个含参数的构造方法MyDate(int year, int month, int day)、以及三个相应的设置方法setXXX(int arg)。

①现编写一个自定义的异常InvalidDateException。当构造方法或设置方法接受的参数不符合实际要求时,抛出一个这个异常的实

例。

②在main函数中分别包含以下代码,捕获并打印异常信息

MyDate d1=new MyDate(-1, 13, 32);

MyDate d2=new MyDate(); d2.setDay(100);

附录1 NonException.java

public class NonException {

public static void main(String[] args) {

String s=null;

System.out.println("step 1.");

System.out.println(s.length());

System.out.println("step 2.");

System.out.println("step 3.");

}

}

附录2 CatchException.java

public class CatchException{

public static void main(String[] args) {

String s=null;

System.out.println("step 1.");

try{

System.out.println(s.length());

System.out.println("step 2.");

}catch(Exception e){

System.out.println(e.getMessage());

}

System.out.println("step 3.");

}

}

附录3 ThrowCatchException.java

class ThrowCatchException{

public static void main(String[] args) throws Exception{ String s=null;

System.out.println("step 1.");

try{

System.out.println(s.length());

System.out.println("step 2.");

}catch(Exception e){

throw new Exception("here,"+e.getMessage());

}

System.out.println("step 3.");

}

}

相关文档
最新文档