overload和override的区别

overload和override的区别

(2007-06-03 17:35:53)

转载

分类:技术交流

 1Overload没有关系,Override有点关系(范围小的可以被范围大的Override)。  
2
Overload返回值类型不同不能作为不同的两个函数,Override应该完全一样的返回类型。  
---------------------------------------------------------------  
 
overload:  
public  a(){}  
public  a(int  a){]  
在一个类中有同名的方法,但是方法带有不同的参数  
 
Override:  
public  class  a{  
   public  aaa(){]  
}  
public  class  b  extends  a  {  
   public  aaa(){}  
}  
方法aaaOverride  
---------------------------------------------------------------  
 
还有,overload一般发生在同一个类中的有着不同的参数名和()不同数量的参数的同名方法之间,但同名方法的返回值可以一样  
override
比较常见的是子类继承父类后,override父类中的一些方法以满足自己的需要。  
我好像记得override的方法前的访问控制不能比父类中的方法中的控制权限低,就是说protected的父类方法不能被overrideprivatedefault的,你可以去看看书,书上应该有介绍。  
 
---------------------------------------------------------------  
 
>>overload
(通常被翻译为过载或重载)  
 
一般语境里overload是对method(方法)而言的,可以指一个类中多个名字相同而参数类型列表不相同的方法,这个名字代表的方法就是被overload了的。编译器会根据参数类型列表的不同来决定调用叫这个名字的很多方法中具体的哪一个。  
 
>>override
(通常被翻译为覆盖)  
 
一般语境里,如果说这个method(方法)是被override来的,就是说在定义这个方法的类的父类中有一个与这个方法同名且参数类型列表相同的方法,在子类中,这个方法被override了。在对这个子类的实例调用该方法时,编译器确切的知道调用的是这个子类的方法。  
 
考虑这样两个类:  
 
class  Father  {  
       public  void  doSomething(){}  
       public  void  doSomething(int  a){} 
       public  void  doSomething(String  s, int  a){}  
}  
 
class  Son  extends  Father  {  
       public  void  doSomething(String  s, int  a)  {}  
       public  void  doSomething(int  a, String  s){}  
}  
 
Father
类中有3doSomething方法,唯一的区别是参数类型列表,它们是overload了的方法。再看子类,第一个方法也叫doSomething,且父类中有一个doSomething方法和这个方法的参数类型列表相同,所以这是override;而第二个方法虽然名字也叫doSomething,但它的参数类型列表跟父类中和子类中其他的doSomething方法的参数类型列表不一致,所以编译器默认这是一个overload的方法。那实际上我们有多少种方式来调用Son的实例呢?如下:  
 
new  Son().dosomething();  
new  Son().dosomething(3);  
new  Son().dosomething("Hi",  5);  
new  Son().dosomething(7,  "Hello");  
 
其中前三个是从父类继承的,且第三个是调用的子类的那个public  void  doSomething(String  s,  int  a){}方法,最后一个是在子类中新定义的一个overload的方法。  
 
注意:overload是指同样的东西在不同的地方具有多种含义,而override是指它随时随地都只有一种含义。 

 

 

 

 

 

 

 

 

 

 

 

 

OverloadOverride的区别。Overloaded的方法是否可以改变返回值的类型?

java面试题2008-11-19 19:12:36阅读37评论0  字号:大中 订阅

方法的重写Overriding和重载OverloadingJava多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写  (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被屏蔽了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)Overloaded的方法是可以改变返回值的类型。   

 

 

 

 

 

 

 

 

 

 

 

 

 

overload一般翻译为重载,表示多个函数共用同一个函数名,为了保证调用这些同名函数时能正确区分究竟应该调用的是其中的哪一个,重载的各个函数的参数表(不考虑形参名)必须彼此不同,通常简略地说成“不同参数表”。它对返回值的类型没有任何要求,所以你可以随意为每一个重载的函数设置返回类型,相同也行,不同也行。

override一般翻译为覆盖,表示子类对从父类继承来的虚函数重新定义,它要求参数表必须跟父类中被覆盖的那个函数的参数表完全相同,返回值类型原则上也要求相同,但如果返回类型是父类的指针或者父类的引用,覆盖时返回类型允许是子类的指针或者子类的引用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值