Java方法的重载以及构造函数的理解

上一篇 / 下一篇  2012-08-09 10:07:04 / 个人分类:Java

51Testing软件测试网L3S+N_ex$f.K-k

  一直对重载和构造函数的概念不是很理解,看了mars的视频以后有一种豁然开朗的感觉,写下来跟大家一起分享下。51Testing软件测试网-t[C7y h|2Ux4}*YE m

U9`8f,[4ZZaY0  方法的重载有3个条件:51Testing软件测试网cJ7X:g8t:]@4v

51Testing软件测试网!w4dB Ts t

  1、函数位于同一个类下面;

z#k Ef6e|0c9Y0

S"}1bL_7R0  2、方法名必须一样;

%nm+qJD6j0

}9Y3gF6^;H o2~0  3、方法的参数列表不一样。

6y h| b7T|p0

\D1e.tGf/Tr3o$N0  比如有以下的例子:

B|nhZN(Q0
class Student {51Testing软件测试网 j(B6|!\h4e
 void action(){
)C3l;H,eZ8wP0  System.out.println("该函数没有参数!");
xpb#BP0 }
M/Z$["p2X9wt X0 void action(int i)
5e v E?E*GB6g0 {
tS${r%iJ)f,{T+A4K0  System.out.println("有一个整形的参数!");
(J$D*i$sAL4p-@+i7~0 }51Testing软件测试网;W:D gu ]X;_(BA2g!`
 void action(double j)
2SH,LIzuY"\1mS0 {51Testing软件测试网)Dc@I_V8N]@/`#z
  System.out.println("有一个浮点型的参数!");51Testing软件测试网1d$a@AwEf
 }51Testing软件测试网 U!VV5PpGvzQ
}

A w-b/Y8y8|,SNK0  该类中定义了3个方法,但是3个方法的参数列表不一样;51Testing软件测试网b?QSuG[_9Um

E;H6h3@{%}tG4O0  下面在主函数中调用这个类:

*m A$d&J9j O0
51Testing软件测试网p F:PMf/Wh

public classTest{

3?H W2M2Vw F7r0

i9`x TR:C:l0 /**
2m-o4m v7[5sO e0  * @param args
^#_+hn[aM%o,`0  * @author weasleyqi51Testing软件测试网 ~_)tU3N"m F
  */51Testing软件测试网I^5[4D4g C3[9Ex
 public static void main(String[] args) {
Z^f!ZQ&r~8H0  // TODO Auto-generated method stub51Testing软件测试网 `M@%BQ*u)y
   Student st = new Student();
:K k$\#HcB0   st.action();51Testing软件测试网0F&Fw@i#My
   st.action(1);
+u K"GU ??1h~0   st.action(1.0);51Testing软件测试网9Id5F`*Y.V"[ `$x e
 }
51Testing软件测试网u9m^AyeV

CC1y/fd osX0}51Testing软件测试网+rv S%d h3DX

5N7pE |?xak3@0  看看运行结果:51Testing软件测试网 `'Y$b"kT4A:olh

mg s2d B:Z*B z0

  从控制台的输出可以看出,我在主函数中实例化一个student对象,分别调用了这个对象的3中方法,由于3个方法的参数不一样,所以可以看到输出的结果也不一样;51Testing软件测试网D1T3rkhR ](T0l n7[

  构造函数的使用:

oU1e*q s)E:f I ~&T[0

  定义一个Sutdent类,类里面定义两个属性:

E)G[k[t"_051Testing软件测试网#O'e@&S c-yN)GW

class Student {

,c5n![(d'S0

?'p KqH8a {.v.gR0 String name;51Testing软件测试网 lMC.^gX
 int age;51Testing软件测试网z9Jj MX9]WW
}
51Testing软件测试网V3Y9UGd(LJ

;bA:tlcv9b0  此时的Student类中没有构造函数,系统会自动添加一个无参的构造函数,这个构造函数的名称必须和类的名称完全一样,大小写也必须相同,系统编译完了之后是以下的情况:

$A ~2N&FJ8p:A+eD0

X:|af)MK0

s)\3b0o AV0
class Student {
E*I{ l CJ a0 Student()
3{h0V7bdI D0 {
I'Y+i? K`0 }51Testing软件测试网?$[ Y/p6oV.O&q)n
 String name;
6We4}'C)@9|0 int age;
0q[#VxQB;y0}

0O6nYxJt ]0  主函数中实例化两个对象:51Testing软件测试网Z|1g3dSe8gZ4K

Q B8up7i3J051Testing软件测试网'p/S5g;Bk`%N8X

public class Test {51Testing软件测试网$Z_du7K hD a ^9x
 /**51Testing软件测试网 gSDl6_
  * @param args
9H&I:m8Rn|t0  * @author weasleyqi51Testing软件测试网~ w1Zz+?if9u
  */51Testing软件测试网5JP v7[n;h3zal+G
 public static void main(String[] args) {
+\*N?;z-j~0  // TODO Auto-generated method stub
u#Tj'h_(I6Uv/H0   Student st = new Student();51Testing软件测试网;MP.N4~s#U3H Ea
   st.name = "张三";
v$s [Z-@x T-NT0   st.age = 10;
;qx i U q0   
gf#DQI0J8g N3jIU0   Student st2 = new Student();51Testing软件测试网wM.uH&xs
   st2.name = "李四";
6a1HO.N3J6M4E lR1CZ0   st2.age = 20;
~^*U8x NS#j \+af0 }
gaQ/{3I0}

Z%ES'?bKV5x0  从主函数可以看出,此时的Student对象的属性比较少,创建的实例也比较少,如果属性多再创建多个实例的话,这个代码的量就很大,这时候,我们可以添加一个带参数的构造函数,如下:51Testing软件测试网1II8SsL4M

vl u;V/R[0

y&yN@ Hq6Y/V0
class Student {
)k,P-Ln1Gp _/[0 Student(String n, int a)
&r r"M_"EF@)S0 {51Testing软件测试网O&L A6O-A$|_-DW
  name = n;51Testing软件测试网wG,toma-p-^^
  age = a;
VwR M E0 }
M3P?(Y8w0 String name;51Testing软件测试网*A e4w0e?7|r/u"P z&O
 int age;51Testing软件测试网*oXFM] g
}
51Testing软件测试网&VL'J;EBZTjrN

  主函数的代码如下:51Testing软件测试网K{z;E4k_Q(S(y

&r:j9HdmP0

UK D]v&S5]%S0
51Testing软件测试网[)m4WGNcor

public class Test {51Testing软件测试网 U u9R k)U5Bcu5z!t~3?

51Testing软件测试网+q n)?Tu

 /**
zl:jTk:E$D0  * @param args
&i6pZ+}&CjEh0  * @author weasleyqi
gW9|e[#oQy0  */51Testing软件测试网{0B/G3\B
 public static void main(String[] args) {51Testing软件测试网^]S b{ [:S5u
  // TODO Auto-generated method stub
mNy!RqE Y0   Student st = new Student("张三",10);
y:oR#wO!na R8pu3A0   Student st2 = new Student("李四",20);
M R,q@h0   System.out.println("st的name:" + st.name +", st的age:" + st.age);
(m d-J? n\hk0   System.out.println("st2的name:" + st2.name +", st的age:" + st2.age);51Testing软件测试网0^w7f)a.A7[o9X
 }
51Testing软件测试网(s/e1bM0QgC

k+V2{? S5kM r$j9K0}

a,~T*C-|I^!NaS0
51Testing软件测试网sD'n.z?y.g

  此时系统运行的结果如图:

Vr ^R6]0

%l s q,tg$c;d D'U W0

  从运行结果可以看出,我们在实例化Student对象的时候,调用了带参数的构造函数,节省了很多的代码,要注意: 如果我们在Student类中定义了一个带参数的构造函数,但是没有写无参的构造函数,这个时候我们在主函数中就不能定义 Student st = new Student();如果在Student类中加上无参的构造函数就可以实现这样的实例化。

K M2c4od?oKB0

TAG:

 

评分:0

我来说两句

Open Toolbar