黑马程序员技术交流社区

标题: 重载问题 [打印本页]

作者: 【专】【属】    时间: 2012-2-23 13:41
标题: 重载问题
本帖最后由 【专】【属】 于 2012-2-24 09:33 编辑

class A{
public void fun(A a){
  System.out.println("new A()");
}
}
class B extends A{
public void fun(B b){
  System.out.println("new B()");
}
}
public class Text001 {
public static void main(String args[]){
  new A().fun(new B()); // 该方法不属于覆写
  new B().fun(new A()); //这样fun()方法算是重载吗?
}
}
请问下B继承A,B中fun()方法算是对A中的fun()重载吗?


作者: zclove898    时间: 2012-2-23 13:47
应该不算吧,在继承体系中,方法之间好像只有子类方法复写父类方法,不存在重载吧?
作者: 陈伟    时间: 2012-2-23 13:55
不是重载,在同一个类中,相同的方法名但参数列表不同,才构成重载,例如构造函数的重载
你这个例子应该叫复写,子类继承父类,然后保留父类功能,复写子类特有功能
作者: 朱皓    时间: 2012-2-23 16:13
你这个不是重载,是覆写,子类继承父类,然后保留了父类的功能,覆写子类特有的功能,
new B().fun(new A()); 你这个语句却是在子类对象上调用了,父类的方法.
.
作者: 泮和顺    时间: 2012-2-23 20:15
陈伟 发表于 2012-2-23 13:55
不是重载,在同一个类中,相同的方法名但参数列表不同,才构成重载,例如构造函数的重载
你这个例子应该叫 ...

参数类型可以算不同吧 一个是父类 一个是子类 这样理解才可以算重载吧
作者: 唐林渊    时间: 2012-2-23 21:09
重载的要求是 方法名相同 参数列表不同,与返回类型无关
作者: H07000223    时间: 2012-2-24 00:26
本帖最后由 H07000223 于 2012-2-24 00:33 编辑

class A
{
        public void fun(A a)        {
                System.out.println("new A()");
        }
}

class B extends A
{
        public void fun(B b)        {
                System.out.println("new B()");
        }
}

这估计既不是重写也不是重载。

重载是在一个类中发生的,这点很明显不满足。

至于重写,看着挺像。其实两个没有任何联系的方法。因为A中的参数类型是类A,而B中的是类B。

所以代码打印结果为=>new A()
                                     new A()  第一个结果显而易见,第二个则是在类B中没找到方法直接从A继承过来了。

你可以将public void fun(B b)改成public void fun(A b)这样就算方法的重写了
作者: 王睿    时间: 2012-2-24 01:56
本帖最后由 王睿 于 2012-2-24 01:57 编辑
  1.       
  2. 区别                                                  方法重载                                                                方法复写
  3. 概念                                   方法名称相同,参数列表不同                               方法名称相同,参数个数和类型相同
  4. 使用范围                                      发生在同一个类中                                       发生在继承关系中,由子类进行复写

  5. class A
  6. {        
  7.         public void fun(A a)
  8.         {               
  9.         }
  10. }
  11. class B extends A
  12. {
  13.         public void fun(B b)
  14.         {
  15.         }
  16. }

  17. 这应该不算重写,因为参数类型是不一样。   
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2