实验四 抽象类接口与异常
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.");
}
}