class Base {
public void amethod(int i) {

}
}class Scope extends Base {
public static void main(String[] args) {

}

//Method Here
}void amethod(long i) throws Exception{}
void amethod(long i){}把下面2个方法放到 //Method Here 里面,这叫过载还是叫重新定义?

解决方案 »

  1.   

    明显是重定义啊,你看看调用的时候就知道了
    try {
       Scope.amethod(1);
    }catch (Exception e) {
    }就这样的调用, 你认为是调用哪个函数?
    调用抛出异常的那个?  对!
    调用没有抛出异常的那个? 也对,谁说加了异常处理语句的操作(Scope.amethod(1))就一定要抛出异常的??
      

  2.   

    可Base里面amethod是public呀,重载的话void amethod(long i) throws Exception{} 
    void amethod(long i){} 也应该是public的。
      

  3.   

    此时你的子类已经继承了  public void amethod(int i) 这个方法,只是你看不见而已void amethod(long i) throws Exception{}
    void amethod(long i){} 
    这2个方法随便放上去一个 叫做方法的重载(Overload) 不知道你说的过载是不是这个
    Overload指同样的方法名可以有不同的参数列表
    当然,不能2个一起放上去 - -#
    如果你子类要放上一个 参数为int的同名方法,这个叫方法的重写(Override),也叫覆盖
    此时权限不能比父类的小,抛出的异常不能比父类的大
    也就是说 修饰符只能是public (因为父类里面是public)
    不能抛出异常(因为父类没有抛),当然 可以抛RuntimeException,因为这个不用try/catch
      

  4.   

    我终于搞懂了,我这参考书上的过载其实是thinking in java里面的重载,重载是thinking in java里面的重写。搞死我了,晕。
      

  5.   

    怪不得我前几道题看着非常变扭,我是先接受了thinking in java里面的术语,没想到这里不一样!
      

  6.   

    子类和父类的访问权限不一致    父类中是public的   而子类中是友好的    子类重载不应该减小访问权限的  所以这里是重新定义啊