永发信息网

Java里面的重载和重写怎么区别?

答案:6  悬赏:70  手机版
解决时间 2021-08-12 02:00
Java里面的重载和重写怎么区别?
最佳答案

重写的主要优点是能够定义某个子类特有的特征:
    如:
    public class Father
    {
    public void speak()
    {
    System.out.println("Father");
    }    
    }
    public class Son extends Father
    {
    public void speak()
    {
    System.out.println("son");
    }    
    }
   这也叫做多态性,重写方法只能存在于具有继承关系中,重写方法只能重写父类非私有的方法,
  
    当上例中 Father类 speak()方法被private时,Son类不能重写 Father类 speak()方法,此时Son类 speak()方法相当与在Son类中定义的一个speak()方法.
    Father类 speak()方法一但被final时,无论该方法被public,protected及默认所修饰时,Son类根本不能重写 Father类 speak()方法,试图编译代码时,编译器会报错.例:
    public class Father
    {
    fianl  public void speak()
    {
    System.out.println("Father");
    }    
    }
    public class Son extends Father
    {
    public void speak()
    {
    System.out.println("son");
    }    
    }//编译器会报错.
    
    Father类 speak()方法被时默认修饰时,只能在同一包中,被其子类被重些,如果不在同一包则不能重写.
    Father类 speak()方法被时protoeted时,不仅在同一包中,被其子类被重些,还可以不同包的子类重写.
  
    重写方法的规则:
    1.参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
    2.返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载.
    3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
    4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常.例如,
父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常.
    而重载的规则:
1.必须具有不同的参数列表;
2.可以有不同的返回类型,只要参数列表不同就可以了;
3.可以有不同的访问修饰符;
4.可以抛出不同的异常;
    重写和重载的区别在于:
    重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值.
  用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般.


public static void main (String[] arg){


System.out.println(“ http://www.jyday.cn/”);


}

全部回答

成员方法的重载:方法名必须相同,参数必须不相同,对于返回的值可以相同也可以不相同。

重写的方法:方法名必须一样,但是放回的值也要想同!

以上是我的理解希望可以对你有帮助!

重载是发生在同一个类中,几个函数名字相同但是签名(参数类型,参数列表)不同。这几个函数的关系就叫做重载。 重写是发生在父类和子类之间,在子类中重写父类中的函数,只能修改函数内容,而不能修改函数签名。
重载就是在同一个类中写同名的方法。 重写就是子类中写的一个方法和父类中的一个方法同名。

我是用VC的.java不太熟,不过你可以参考我的面试题...

重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?

常考的题目。从定义上来说:

重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

重写:是指子类重新定义复类虚函数的方法。

从实现原理上来说:

重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。如,有两个同名函数:function func(p:integer):integer;和function func(p:string):integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。对于这两个函数的调用,在编译器间就已经确定了,是静态的。也就是说,它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关!

重写:和多态真正相关。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚绑定)。

重载 是不改变父类的方法  作用跟父类方法的作用一样

重写 是把父类的那个方法重新定义内容  

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
AVA为什么下载补丁后还是在维护状态
黄陂区武汉王力安全门(中兴路店)在什么地方啊
TMD为什么我DNF更新好150多MB文件.还480KB就
龙一般几级出坐骑?我带了两个龙都十五级了还
关于蛮骨,睡骨,凶骨那一集《犬夜叉》
什么样的发型会让头发看起来多一点(是长发)
QQ团队语音怎么点亮
谁有beyond乐队从不出名到成名的电影不是《莫
我不知道怎么办了,前面的路,我完全看不到,
关于米老鼠和唐老鸭
中国跨纬度最广的省是海南还是新疆?
真的有天师钟馗吗问
ITUNES右下角只有设置和自动填充,哪里有什么
扶沟县周口黄焖鸡米饭我想知道这个在什么地方
北方的大学与南方的大学又什么不同
推荐资讯
在番禺怎么样回到连州
西城beautiful in white 伴奏
夷陵区宜昌八戒包子在哪里啊,我有事要去这里
这是怎么回事?以前都没有
外国人为什么对中国人有偏见和抵触感呢?
我家电脑开不了机,
不用腾讯充值卡用其他的充值卡可以充Q点吗?
怎样改掉坏脾气呐?
中国有风险,投胎需谨慎,既然来了我也就认了~
你怎么养说吧!
手机QQ七夕我要你幸福
怎样在MP3上显示歌词?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?