重载VS重写

  在面向对象中重载(overload)与重写(override)是两个非常重要的概念,一字之差,那么它们之间的区别在哪呢?


  定义区分:

          重载(overload):如果在类中定义了多个同名的方法,他们有不同的参数个数或者不同的参数类型,则称之为方法的重载。

          重写(override):如果在子类中定义某方法与父类有相同的名称和参数,我们称改方法被重写。


  简单对比:

         重载和重写都表现了类的多态性,但二者多态性的表现形式是不同的。

        

         重写(override)的实质是子类对父类的继承实现多态性,子类去重写父类的方法,具体的实现父类抽象的方法。

                 实例:猫吃鱼,狗吃肉

                 实例分析:动物类有一个吃的方法,不同的动物实现吃这个方法是不一样的。

         

         重载(overload)的实质是同一个类当中,通过参数列表的改变来重载同一个方法。

                 实质:一个求面积的类,三角形需要的是底和高,正方形需要边长。

                 实例分析:这样就要重载求面积的方法来实现不同形状求面积的需求。


  详细区分:

                

  代码比较:

 重写(override) 

<span style="font-size:18px;">'基类
public Class TheBase
    public overridable sub talk()
         msgbox("what's up")
         end sub 
    end class

'派生类
public class TheDerived inherits TheBase
     public overrides sub talk()
         msgbox("I'm not the base.")
         end sub
     end class

'使用
  sub main()
     dim testclass as theDerived
         TestClass.talk()
         end sub

'运行结果:
     对话框显示:I‘m not the base
</span>

重载(overload)

<span style="font-size:18px;">public class TheClass
    public overloads sub Tooverload(byval value as integer)
         msgbox("I got an integer:" & cstr(value))
          end sub

'重载
public Overloads sub ToOverload(byval value as string)
     msgbox("I got a string:" & value)
     end sub 
end class

'使用
 sub main()
     dim myclass as TheClass
     MyClass.ToOverload(1234)
     MyClass.ToOverload("Hello World!")
     end sub

'运行结果:
       对话框一:I got an integer:1234
       对话框二:I got a stirng:Hello World!</span>

  经过多方面的对比,相信大家对于重写和重载有了更深的认识,区分好这两个不同的概念,肯定会在您今后的编程道路上如虎添翼!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 58
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 58
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值