黑马程序员技术交流社区

标题: 重载和覆盖的区别 [打印本页]

作者: 韦振华    时间: 2012-12-24 22:25
标题: 重载和覆盖的区别
各位大侠,在面向对象编程中,关于重载和覆盖的区别是啥呀?希望有例子看哦
作者: netboy032    时间: 2012-12-24 22:44
这两个根本没什么关系,重载是用在同一个类中的,为的是同名函数能实现不同的功能。
而覆盖是用于子类和父类之间,用于子类如果不想继承父类的某个函数,或者想要扩展父类的某个函数功能。
作者: 刘经鹏    时间: 2012-12-24 23:03
java中可以对同名函数进行重载,对继承来的方法进行覆盖,列举一下特性:


覆盖:

1.覆盖的方法名和参数必须和父类的方法保持一致,且父类的方法对子类是可见的。

2.覆盖之后的方法的访问权限可以>=父类原来方法的访问权限,返回类型级别可以<=父类的返回类型(继承或实现父类的返回类型的类)
重载:

1.重载需要方法名相同,参数类型不同。

2.两个不同的参数类型可以是继承或实现的关系(但是不推荐),java会自动匹配最优的方法,传进来的如果是更具体(比如子类)的就会调用更具体的方法。

作者: 冯伟超    时间: 2012-12-25 02:11
重载是在一个类中,重载表示的是方法名相同,参数列表不同,与返回值没有任何关系。
覆盖是存在于继承或是接口的实现中的,是关系到两个类中的。通常都是子类对父类的中的方法进行重写


作者: 冯伟超    时间: 2012-12-25 02:14
下面就是重载和重写的示例,希望楼主好好体会
重载的示例:
  class A
{
   public void show(int a,int b)
   {}
    public void show(int a,int b)
   {}

}

重写的示例:
      
class Demo{
    public static void main(String[]args){
    B b=new B();
    b.fun();

    }
}
abstract class  A {
    //public  abstract  void fun();
     public void fun(){
     System.out.println("ttt");
     }

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


作者: 黄锦成    时间: 2012-12-25 09:15
重载:
public void add(int a,int b)
public void add(int a,int b,int c)

覆盖,建议你去看视频
作者: 范德农    时间: 2012-12-25 14:39
这么说吧,假定一个类a,它有个方法public a b(int num),然后它有个子类c。
如果你在a中又写了个方法public a b(String num),这就是重载,啥叫重载,方法名想通,形参不同的就是重载;这两个是硬性指标,其他无所谓
而重写呢,子类继承父类,在子类里把父类方法重新过一遍,表面上看还是你的方法,但实际上不是了,它的要点在于方法名、形参必须相同,至于其他的,可以用一句话总结,两同两小一大,两同是方法名、形参相同,两小是子类方法抛出异常、返回类型要比父类的小,一大呢就是子类的访问权限必须比父类大
就是说重写只能发生在c里,例如在c里写个public c b(int num)就是重写,另外需要强调的一点就是,静态方法只能被静态方法重写,实例方法同样




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