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

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

51Testing软件测试网UA"_ d)r U/k y,c%Ik6~

  一直对重载和构造函数的概念不是很理解,看了mars的视频以后有一种豁然开朗的感觉,写下来跟大家一起分享下。

w#H F3UXy0qm#d(]051Testing软件测试网&_9\$DdL&?db5AS

  方法的重载有3个条件:

eQ.d3c:ONX(t+A0

b'd9T:]+`*Q_1EU2G0  1、函数位于同一个类下面;51Testing软件测试网.d(F7YQPn.\/t {N

51Testing软件测试网`Q!f:uHH0O

  2、方法名必须一样;51Testing软件测试网,\_7Ao:~J6] N

4a5ZA` \(X/L0  3、方法的参数列表不一样。

w!gL0upu3R0

&k;jS5TpCc/B0  比如有以下的例子:

9@U h|w0
class Student {
$SZ s} Rx0 void action(){51Testing软件测试网)z'p+[.I3\
  System.out.println("该函数没有参数!");
`ZZN [7v0 }
d _FihL4es0 void action(int i)
1h iI kHTd e1Y9RH5g5A0 {
w*f2s9f,A*Z0  System.out.println("有一个整形的参数!");
L X3@ ^6`&s-g0 }
n1ck }6TpL0 void action(double j)
u6T1lN9y'm0 {
^.Q#K0?n)n#TBy;g0  System.out.println("有一个浮点型的参数!");
kFvd/Cb0 }
5r)U,p3M0i|w2j0}
51Testing软件测试网GXz&h0{p!||}

  该类中定义了3个方法,但是3个方法的参数列表不一样;

6ZU|h(I2JA0

a8W3l)d B0  下面在主函数中调用这个类:

nKZ2i\!T0
51Testing软件测试网;[KL#G,T B"@

public classTest{51Testing软件测试网/pHeH/hBX3\y

51Testing软件测试网 j5j/c1J B

 /**51Testing软件测试网,O%uHF5TG.Qwy;e
  * @param args51Testing软件测试网zi vNrABw#j
  * @author weasleyqi
qB(Db&@9\'a,kL] T0  */51Testing软件测试网R~~T+e
 public static void main(String[] args) {
0~{ir:S Zj0  // TODO Auto-generated method stub
0\1b!t:B/_uf&w-? G0   Student st = new Student();51Testing软件测试网5Nci;w3{5B
   st.action();
I|#b F(s ?W`5{0   st.action(1);
6^_g5i&f0   st.action(1.0);
h'Q3p;yr-Y0 }
51Testing软件测试网#z.B6{G8n#^2k M |

51Testing软件测试网A3F[bi UNV

}

r:i L#B,r0

p g&e[?MQ W0  看看运行结果:51Testing软件测试网|N8E+W4k8N"q

51Testing软件测试网(F&Q"g0fT

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

  构造函数的使用:

H Q&R'U"Jr k#W0

  定义一个Sutdent类,类里面定义两个属性:51Testing软件测试网#mTTj d?E$vB

51Testing软件测试网M:sGG"TYn$E

class Student {51Testing软件测试网6r;m)bI/lYS T x~{3x

b$Km}&V-RqC"o0 String name;51Testing软件测试网:T0b1^8a)H!x
 int age;51Testing软件测试网V4R-B"r3AKK
}
51Testing软件测试网+M3H z4~ EN-x#w

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

4g ~.ReVoG%u0

X+D'u.O!?*S(NW,q0

6uaC1g*]!v5Il0
class Student {51Testing软件测试网$S#M/VynW
 Student()51Testing软件测试网C4h6fIiB
 {51Testing软件测试网)K}*q@:de/| x
 }
U!v D`'|b0g,w K:r0 String name;
@8ik9NHct q4O0 int age;51Testing软件测试网Q.D8A&M2B6[3o
}
51Testing软件测试网_g [p$x!WC

  主函数中实例化两个对象:

G f},E+K6M0

_`5MLP&y051Testing软件测试网sL9q|o

public class Test {
VC%av5bK0 /**
AH G\;q w0  * @param args51Testing软件测试网 kG4UM{?!UFY!N9W
  * @author weasleyqi51Testing软件测试网G2HNg3?D%d1b!HC
  */51Testing软件测试网bz2G-V3KH
 public static void main(String[] args) {51Testing软件测试网0?Qva;Kb u8ep
  // TODO Auto-generated method stub51Testing软件测试网#K${`7F\6E8xq
   Student st = new Student();
/\A8wq3t({*C{&G:e0   st.name = "张三";
%n-@v u iw*~0   st.age = 10;
T&o| T?)A!]0   51Testing软件测试网J!hPF,?
   Student st2 = new Student();
Wr pW&Cw_0   st2.name = "李四";
,Cx-x(KMWg+T8U0   st2.age = 20;
Y ]!j2O_?H0 }51Testing软件测试网Bb OGS O
}

8g7I#Y6[,bz/k0  从主函数可以看出,此时的Student对象的属性比较少,创建的实例也比较少,如果属性多再创建多个实例的话,这个代码的量就很大,这时候,我们可以添加一个带参数的构造函数,如下:

Gr/?:O)_ X4D0

^Qn3y Z%?$Rl0

{(R5K`r%I0
class Student {51Testing软件测试网)y8O `@5J9u
 Student(String n, int a)
0{` |.l G)Z0 {51Testing软件测试网b#a.Im Y1k
  name = n;
:] ^7Er Ll#^{eSk0  age = a;51Testing软件测试网~#?Yot,JJK;k
 }
1_5^GdH!h0 String name;51Testing软件测试网)h(d3d+v+j2U-D*R
 int age;
X&r Sqv}0}
51Testing软件测试网})]H DsQ

  主函数的代码如下:51Testing软件测试网p@"``nDGi!~

51Testing软件测试网*q!_&v[2Tu7TXu']

*njtjY)L Ph0
51Testing软件测试网8Aep/b/O"Nc

public class Test {

NO2P'[;y|h+O7Y?0

#B^qrbu)_0 /**51Testing软件测试网 XC[ Xn%_b&r
  * @param args51Testing软件测试网8v(d;Oi Uo
  * @author weasleyqi51Testing软件测试网-VW;M,Cq;N x(q p)icQ
  */
\+^!J5s L\#b0 public static void main(String[] args) {
s y WXar(g2u+nUg8l0  // TODO Auto-generated method stub
(|_-r5XC ]YEg(`0   Student st = new Student("张三",10);
v9o.TJQd&I u M0   Student st2 = new Student("李四",20);
*Bo|:pR!P,rr0   System.out.println("st的name:" + st.name +", st的age:" + st.age);51Testing软件测试网nU4m"y,y!d
   System.out.println("st2的name:" + st2.name +", st的age:" + st2.age);51Testing软件测试网W~8\UZ/B` O
 }
51Testing软件测试网kMri;j2g L

|ZPLB~0}51Testing软件测试网6jED;UO9h"s7Bj

QVhB/N1Oq0  此时系统运行的结果如图:51Testing软件测试网pX@li0r

51Testing软件测试网l&q2H'J4A:A }c4n

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

o$o2|*D(^M0

TAG:

 

评分:0

我来说两句

Open Toolbar