A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 【专】【属】 黑马帝   /  2012-2-23 13:41  /  1808 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 【专】【属】 于 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()重载吗?

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

7 个回复

倒序浏览
应该不算吧,在继承体系中,方法之间好像只有子类方法复写父类方法,不存在重载吧?
回复 使用道具 举报
不是重载,在同一个类中,相同的方法名但参数列表不同,才构成重载,例如构造函数的重载
你这个例子应该叫复写,子类继承父类,然后保留父类功能,复写子类特有功能
回复 使用道具 举报
你这个不是重载,是覆写,子类继承父类,然后保留了父类的功能,覆写子类特有的功能,
new B().fun(new A()); 你这个语句却是在子类对象上调用了,父类的方法.
.
回复 使用道具 举报
陈伟 发表于 2012-2-23 13:55
不是重载,在同一个类中,相同的方法名但参数列表不同,才构成重载,例如构造函数的重载
你这个例子应该叫 ...

参数类型可以算不同吧 一个是父类 一个是子类 这样理解才可以算重载吧
回复 使用道具 举报
重载的要求是 方法名相同 参数列表不同,与返回类型无关
回复 使用道具 举报
本帖最后由 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:35
8#
本帖最后由 王睿 于 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. 这应该不算重写,因为参数类型是不一样。   
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马