您的位置:首页 > 其它

关于方法的重写的测试

2010-04-22 22:34 162 查看
package pkg1;

public class Jupiter{
void method1(){
System.out.println("In Jupiter");
}
public void call(){
method1();
}
}

Java code

package pkg2;

import pkg1.Jupiter;

public class Minerva extends Jupiter{
public void method1(){
System.out.println("In Minerva");
}

public static void main(String[] args) {
new Minerva().call();
}
}

这个程序的运行结果是(请选择):
A 编译错误
B In Jupiter
C In Minerva
D In Jupiter 
  In Minerva
 
 
重新测试了下 结果如下:
如果两个类放同一个包 答案为C 如果放在不同的包答案为B 所以原题答案为B

我的分析:
父类的method1 方法是default的修饰符 也就是friendly的修饰符 这个修饰符权限是包级的 在同一个包的类可以访问它 在不同的包不能访问 这个也就是出现上面两个不同答案的原因

下附方法重写和重载的规则:

重写方法的规则: 1.参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载
2.返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载 
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常.例如: 父类的一个方法申明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常(unchecked exception,如运行时异常)
5.要成功重写父类方法,子类必须有访问父类被重写方法的权限,如 假设一父类方法为final 当子类试图重写它时 会出现编译器报错 当父类的某一方法为private时,子类不能重写父类该方法,此时在子类中定义的试图重写的方法仅相当于一个新的方法,与父类中的该方法没有任何关系.

重载方法的规则: 
1.必须具有不同的参数列表
2.可以有不同的返回类型,只要参数列表不同就可以了
3.可以有不同的访问修饰符
4.可以抛出不同的异常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息