一、题型
简答题,4题,每题15分,共60分;编程题,2题,每题20分,共40分
二、题目
共两套题,学号末尾数单号学生做第一套,学号末尾数双号学生做第二套题
第一套题
一、简答题
1 什么是多态性? 方法的重载和覆盖有何区别? 阅读下列代码,指出其中存在的重载和覆盖, 写出输出结果是什么?解释为什么这样输出? (15分)
class C1
{
public void f() {
System.out.println("C1.f");
}
}
class C2 extends C1
{
public void f() {
System.out.println("C2.f");
}
}
class C3 {
public void g(C1 one) {
System.out.println("g(C1)");
one.f();
}
public void g(C2 two) {
System.out.println("g(C2)");
two.f();
}
}
public class Main1
{
public static void main(String[] args) {
C1 one = new C2();
C3 three = new C3();
three.g(one);
}
}
答:多态性是指允许不同类的对象对同一消息作出响应,多态有两种表现形式:重载和覆盖;
Class3中的2个get()方法为重载,方法名相同,参数不同;
Class2中的find()方法为覆盖,方法名和参数都一样, 子类Class2重写了父类Class1中的find()方法;
输出结果:get(Class1)
sClass2.find
输出原因:由于子类Class2的find()方法与父类Class1的方法同名,因此Class2的方法会覆盖Class1的方法。在执行C1ass one = new Class2()语句时,会调用Class1类的构造函数,因此three.get(one)语句会调用传入参数为Class1的get()方法,输出get(Class1)。而由于实际创建的是Class2类的方法,后面的方法调用都会调用子类Class2的方法,因此输出Class2.find。
2、请用自己的语言介绍throw/throws有什么联系和区别?在程序中应如何使用?另外谈谈final、finally的区别和作用,必须举例说明用法。(15分)
答:final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖和类不可被继承。Finally作为异常处理的一部分,只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定被执行。
/*
* 类FinalTest被声明为final,所以不能被继承,所有方法都不能被重写。
* finally中的代码一定会被执行,即使程序被return中。
*/
package com;
public final class FinalTest {
public static void main(String[] args) {
FinalTest m = new FinalTest ();
try {
throw new NullPointerException();
} catch (NullPointerException e) {
System.out.println("程序抛出了异常");
} finally {
System.out.println("执行了finally语句块");
}
}
}
若某个方法可能会发生异常,但不想在当前方法中处理这个异常,则可以使用throws、throw关键字在方法中抛出异常。throw关键字通常用于方法体中,并且抛出一个异常对象,程序在执行到throw语句时立即终止,它后面的语句都不执行。throws关键字通常被应用在声明方法时,用来指定方法可能抛出的异常,多个异常可以使用逗号分隔,使用throws关键字将异常抛给上一级后,如果不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码。
package com;
/*
* 在类ThrowTest中创建pop()方法,在该方法中抛出Exception异常,在主方法中调用该方法,并实现异常处理
*/
public class ThrowTest { //创建类
static void pop() throws Exception {
//定义方法并抛出异常
int a=1/0;//除数为0
}
public static void main(String[] args) {//主方法
95分答案,想了解的加我weixin 吧:chenjing-1125