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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韦振华 中级黑马   /  2012-12-24 22:25  /  2806 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

各位大侠,在面向对象编程中,关于重载和覆盖的区别是啥呀?希望有例子看哦

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 鼓励分 。

查看全部评分

7 个回复

倒序浏览
这两个根本没什么关系,重载是用在同一个类中的,为的是同名函数能实现不同的功能。
而覆盖是用于子类和父类之间,用于子类如果不想继承父类的某个函数,或者想要扩展父类的某个函数功能。
回复 使用道具 举报
java中可以对同名函数进行重载,对继承来的方法进行覆盖,列举一下特性:


覆盖:

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

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

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

2.两个不同的参数类型可以是继承或实现的关系(但是不推荐),java会自动匹配最优的方法,传进来的如果是更具体(比如子类)的就会调用更具体的方法。
回复 使用道具 举报
重载是在一个类中,重载表示的是方法名相同,参数列表不同,与返回值没有任何关系。
覆盖是存在于继承或是接口的实现中的,是关系到两个类中的。通常都是子类对父类的中的方法进行重写

回复 使用道具 举报
下面就是重载和重写的示例,希望楼主好好体会
重载的示例:
  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");
    }
}

回复 使用道具 举报
重载:
public void add(int a,int b)
public void add(int a,int b,int c)

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