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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

李锐

注册黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 李锐 注册黑马   /  2011-9-17 16:24  /  1977 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在以前的java学习当中,我学到方法的重载与覆盖的时候就觉得挺模糊的,麻烦各位给解释一下几个问题:1、方法的重载与覆盖的区别
2、二者在程序当中的使用情况(也就是说为什么我们要用重载和覆盖或者是在什么样的情况下使用)


因为自己基本功不踏实啊,所以问的问题比较2.各位不要嫌弃哈!

6 个回复

倒序浏览
黑马网友  发表于 2011-9-17 16:25:27
沙发
求求各位举例说明哈!
回复 使用道具 举报
黑马网友  发表于 2011-9-17 16:41:03
藤椅
覆盖也就是常说的重写override这样叫着比较顺口,
重写和重载其实都是java多态的表现方式,并且是主要表现方式。用最简单的说法:
同一个类中,函数名一样,返回值和参数个数类型不一样的叫做重载。
原则:1.方法名必须相同。
      2.方法的参数类型和参数个数两者至少有一不同。
      3.方法的修饰符和返回值类型可以不同。
特点: 1.在同一个类内
       2.相同的函数名
       3.不同参数、返回值。
例子:
System.out.println(“abc”);
System.out.println(123);
System.out.println(1.3);  
父类和子类中,同名函数,同返回值类型同参数叫覆盖。

覆盖,就是子类中出现于父类相同的方法。
原则:1.方法名必须相同。
      2.方法的参数个数及类型必须完全相同。
      3.返回值类型必须相同。
      4。子类不能缩小访问权限。
      5。子类不能抛出比覆盖方法更多的异常。
特点:1.在不同类内(一个在子类,一个在父类)
             2.基类函数需要使用virtual声明,子类的可有可无
       3.函数名,参数,返回值均需相同

例子:
public class father{
public overwritting(){
  SOP("father method");
}

public class son extends father{
public overwritting(){
  SOP("son method");
}
public static void main(String args[]){
  father son=new son();
  son.overwritting();
}
}

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-17 16:59:43
板凳

关于方法重载和覆盖的区别

首先说一下我也是基础阶段,解释的有些可能不太对,所以希望大侠们看到帮忙指点一下,我个人认为方法的重载就是这两个方法的权限和方法名相同,并且是在同一类中实现的,而方法的覆盖一般是指当你继承了一个父类之后,你想用父类中的某一方法,但是它的功能不是你想要的,这时候一般就会在子类中再重写一下父类中的方法,这个重写的过程就叫做覆盖:比如,在这个People类中
  class People{
             String name;
             int age;
      public People(){
           ..............
              }
       public  People(String name,int  age){
           this.name=name;
          this.age=age;
       }
    public void study(){
   System.out.println("My name is People,I am Studing");
        }
}
  class Student  extendes People{
         public  void study(){
         System.out.println("My name is Student,I am Studing");
}
}
有两个构造方法,这两个构造方法只是参数不同,这就是方法的重载,当然普通函数也可以重载。
Student继承了people这个类,顺其自然也就继承了Study这个方法,因为考虑到功能不同,所以在Student类中又重写覆盖了People类中的Study方法。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-17 17:40:19
报纸

回复 楼主 的帖子

覆盖嘛,简单理解,就是将父类的变量和方法在此类里重写一遍,以达到覆盖的目的。
重载其实也可以理解成覆盖,只不过是将父类的构造方法在此类中改变了,简单理解:针对构造方法的特殊覆盖就叫做重载。
呵呵,至于例子,上面的同学已经举了很多例子,我就不举了。希望说这么通俗能对你有所帮助。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-18 08:44:12
地板

回复 楼主 的帖子

楼主要记住1、重载是发生在同类中的,方法的重载是发生在子类中的,
          2、这同类和子类不是同等的,同类也有可能是子类,也有可能是父类,还有可能是子子类,
          3、子类是继承呃一个提现,也就是说一个类后面extends了另一个类,那么这个类一定是extends后面那个类的子类,你可以在这个类中覆写所有子类中的方法,所谓的覆写就是方法名返回类型都和父类中的一样就是照着父类的写,但是方法体可以根据自己的需要写,何谓方法体就是用{}括起来的内容。ok
                    4、重载只有三种看似和重写相反了写,一就是返回类型不一样就是重载,二就是函数的参数的个数不一样也是重载,方法的参数的类型不同也算一重载。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马