public class A {
public void method()
{

}
}
class B extends A{
public int method()
{
return 1;
}
private void method(int j)
{

}
}为什么子类里面的两个method()方法会出错
我的意思是这个两个方法随便写一个在子类里面都会出错。
不是因为重命名的原因

解决方案 »

  1.   

    public void method()
        {
            
        }

    public int method()
        {
            return 1;
        }
    如果你这样定义,是肯定会报错的,因为你如果子类向上转型为父类的话,编译器是无法识别要调用那一个方法
    如果要区分,只有通过传递的参数区分,而不是通过返回值区分
      

  2.   


    public class A 

    public void method(int j) { }
     }
     class B extends A
    { public int method() 
    { return 1; }
     private void method(int j) 
    { } 
    }
      

  3.   

    Override? Or Overwrite?
    java中有两个概念很容易搞混Override和Overwrite
    1,Override在java中翻译成重写或者覆盖,
    而不是熟知的重载!!!
    Override就是子类function跟父类function完全一致(非peivate函数),包括函数名,参数和返回值。
    经过Override后的function,在子类中不再起作用,通过子类调用该function,只能
    是子类的该function;另外,子类中允许出现该函数的同名函数,但参数不能一样!
    其实这样的函数才是对父类的这个函数的重载!
    2,Overwrite就是在原来的基础上继续写!
    这才是重载!!!
    Overwrite指的是同一个class中的同名但不同参数的function~ 
      

  4.   

    你写的方法属于覆盖,即overwrite,允许对参数列表进行修改,但是访问权限和返回值都不能更改,因为你要做的是对父类方法的修改,所以你不能自己随意定义其它的东西,这样做会改变父类中方法的原意,子类的功能只是在父类的基础上进行扩充和很小部分的修改,不能改变父类的原意
      

  5.   

    你B是继承A,只要你B里有个跟A一样名字的方法并且参数也一样,java就认为你是override,但override要求方法跟父类的修饰符完全一样,第一个method有返回值所以出错,第二个method单独用不会出错,这个是Overwrite,应为你参数不同。