class A{
  public void tt(){}
}
class B{
  public int tt(int num){}
}
这样重载从A中继承的方法算不算是在同一个类中呢??

解决方案 »

  1.   

    是的,方法的重载必须是要在同一个类中,而且方法名相同,参数列表不同,如果写成
    class B extends A{
      public void tt(){
    }
    }
    这样是方法的重构了,楼主那样写不是重载也不是重构。
      

  2.   

    方法的重载包括:一、方法名称相同,参数类型不同;二、方法名称相同,参数个数不同,如果在一个两个没有关系的类中的话就是两个不同的方法。如果以楼主的例子来说的话:要么A继承于B(或者B继承于A)且实例的时候是实例的B的对象,这样的话才算是方法的重载。(个人浅谈,请指教……)
      

  3.   

    class A{
      public void tt(){}
    }
    class B extends A{
      public int tt(int num){}
    } 这样也算是重载
      

  4.   

    重载
    同一个CLASS中相同具有函数名,不同参数类型或者不同参数列表的现象。好处函数可以复用
             public void a(){
    }
    public void a(int a){
    }
            public void a(int a,int b){
    }
    public String a(String c){
    return "";
    }
            返回值不同构不成重载
             public void a(int a){
    }
            public String a(int a){
            }
            会报错
    不同CLASS中通过extends方式
           把父类中方法继承过来 相当于 是子类的方法了,所以跟同一个CLASS得情况相同。
            class A{ 
                 public void tt(){} 
           } 
           class B extends A{ 
                 public int tt(int num){} 
           } 
      

  5.   

    重载要在同样的可见范围内。比如说,当前位置对 A.tt() 是可见的,但对 B.tt() 是不可见的,那么就不能看成是重载。
      

  6.   


     class A{ 
                public void tt(){} 
          } 
          class B extends A{ 
                public int tt(){
    return 2;} 
          } 同一个类如果两个方法的名字相同,即使返回类型不同,也要保证参数不同,因为返回类型不参与比较。
    想这样就会报错的!
      

  7.   

    重载就是同类中的两个方法,方法名相同参数不同。(方法的签名就是方法名+参数类型,重载就是判断方法的签名来执行方法)
    从父类继承的方法还是属于本类啊至于可见性,是可以这样理解:
    同类两个方法同名不同参一个private一个public
    那么在本类中调用该方法会产生重载,而在本类之外调用就不会产生重载(因为private的你根本调用不了)
      

  8.   

    补充:自己对可见性的理解自己都觉得未必正确,think in java上写的是只有非private方法才可以被重载,个人觉得private方法在自身类中可以被重载
      

  9.   

    如果子类继承了父类的方法,可以对父类继承下的方法重写,也可以重载.只限public ,protected
      

  10.   

    B继承自A,A中的public和protected方法都是B的方法
      

  11.   

    给LZ一个终极解释吧,希望能对你有用前提:类是对象的结构信息保存体。类是一个封装体,其内部封装了成员
    成员按照类别区分为属性(Attribute)和行为(Method)此处属性省略不说,单说行为
    一个行为/方法,唯一区分的标志,方法名+参数列表也就是说,同名但不同参的方法,充其量是他们的名字碰巧一样而已。并没有什么实质性的关联。所以本类里面可以重载,子类也可以重载父类方法,并且返回值啊,异常啊什么的都没有约束。应为是不同的方法。而覆盖或者称重写却不一样,因为同名又同参,所以,在一个类里面是不可能出现的,只有子类去覆盖父类的某一个方法。此时子类的方法必须要符合(最起码是兼容)父类中方法的申明,也即,返回值,异常不扩大化,访问控制符不更封闭化。否则,父类里申明了一个方法是公开的,子类给封闭了,根据子类可以当父类看待的原则,这样就是挂羊头卖狗肉了,返回值和异常也类同。虚拟机调用方法的时候存在一个从自身开始向上回溯的过程,如果当前类中有此方法,就用,没有就搜其父类,一直到Object,再搜不到就报NoSuchMethod。
    如果子类有一个方法跟父类同名同参,那么搜到子类的该方法就会直接使用,而父类的方法依然存在,只是不会被搜到了,因此叫覆盖。PS:覆盖 != 替换。