面向对象方法的重载(overloading)和覆盖(overriding)。
( C% |/ e O+ W7 c% M; A2 \在有些JAVA书籍中将overriding称为重载,overloading称为过载。
1 r! u7 ]" c" F5 }" Y- }) i* M0 qOverloading在一个类中可以定义多个同名方法,各个方法的参数表一定不同。但修饰词可能相同,返回值也可能相同。
+ u' J1 R0 ^: M2 X# @! E在程序的编译过程中根据变量类型来找相应的方法。因此也有人认为 overloading是编译时的多态,以后我们还会学到运行时多态。% k. b( R% R, y" F5 F2 }
为什么会存在overloading技术呢?作为应对方法的细节。$ `3 ]( S& {) R# |. n/ Z3 F/ I. s
利用类型的差异来影响对方法的调用。
1 ~8 c# L7 S# }" Z1 C6 |8 Z吃()可以分为吃肉,吃菜,吃药,在一个类中可以定义多个吃方法。4 v7 a5 [ g8 B& H/ w
构造方法也可以实现overloading。例:
& A# M% e0 Q b, y! z5 R cpublic void teach(){};
# o7 [7 }- @: I+ {& Wpublic void teach(int a){};8 C' M0 B, Q# H% M* a
public void teach(String a){}为三种不同的方法。
$ c ^ u! k$ } H- v! a( qOverloading方法是从低向高转。
7 H4 u+ K! f8 JByte—short—float—int—long—double。" a: w* v# r: b6 S
在构造方法中,this表示本类的其他构造方法:# U$ [3 h# }, O3 g
student(){};
! y, R P3 q9 N6 r! pstudent(string n){% P% v% W4 q6 _; g: z9 w
this();//表示调用student(), k. x8 f' S) T' j$ d
}7 b4 Y: {! [7 i6 }2 c M' q3 D: V9 w- Q2 ?
如果调用student(int a)则为this(int a)。
3 S; W q+ o. h" V: F特别注意:用this调用其他构造方法时,this必须为第一条语句,然后才是其他语句。* D! y5 W$ l. U2 w" ]* Q4 N
This表示当前对象。
0 Y t7 e! X/ [/ Y; v, oPublic void printNum(){! h' [, r# ~' u& ~. B+ T
Int number=40;1 r3 E3 g% v4 ]0 k
System.out.println(this.number);
; F0 d6 d2 s' I}* p2 n( _' f! v, h9 p- [# \
此时打印的是实例变量,而非局部变量,即定义在类中而非方法中的变量。: g! s6 }6 {8 [' `( u1 @0 W, {6 }
This.number表示实例变量。
- e) X* d* e7 I: g/ G谁调用this.number那么谁即为当前(this)对象的number方法。 |