a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 98|回复: 0

[专业语言] java认证之Javathis、super的用法(1)

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
java认证之Javathis、super的用法(1): ?2 o1 U  ?: j) f

1 w3 c$ n6 W. @在Java中,this通常指当前对象,super则指父类的。当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便 可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个构造函数,这些马上就要讨论。如果你想引用父类的某种东西,则非 super莫属。由于this与super有如此相似的一些特性和与生俱来的某种关系,所以我们在这一块儿来讨论,希望能帮助你区分和掌握它们两个。6 V6 z- x% H0 X8 B8 F
在一般方法中
( k) b! Y' t( p. `# e7 I( w最普遍的情况就是,在你的方法中的某个形参名与当前对象的某个成员有相同的名字,这时为了不至于混淆,你便需要明确使用this关键字来指明你要使用某 个成员,使用方法是“this.成员名”,而不带this的那个便是形参。另外,还可以用“this.方法名”来引用当前对象的某个方法,但这时this 就不是必须的了,你可以直接用方法名来访问那个方法,编译器会知道你要调用的是那一个。下面的代码演示了上面的用法:. l% |, Q% G0 ]- S! ^0 C
public class DemoThis{
$ Y3 W( j8 Z( Z' F/ u1 mprivate String name;: A$ S' A- y  e% Q0 C
private int age;* D$ C) S/ i2 b% R! ~" X4 j2 @
DemoThis(String name,int age){+ D, X8 [  E4 ~, A* a/ A# o1 X
setName(name); //你可以加上this来调用方法,像这样:this.setName(name);但这并不是必须的3 i( P; B  |6 N- b
setAge(age);
! a  K* N  t' n6 I' \) y+ ~4 B; R# J: tthis.print();
6 Y1 B+ X. c& S; r, v9 N8 W}
( z; x3 f8 B. z, ~) Y( K9 Qpublic void setName(String name){5 U- C4 E3 [# K' V+ [' `
this.name=name;//此处必须指明你要引用成员变量: `; C3 s- K; p2 U% |0 {" ]' ^6 N
}
! v" d0 {9 ?, E7 @0 q2 X' F. bpublic void setAge(int age){
4 B0 S" F8 H! C! }1 X6 L8 Dthis.age=age;. @1 T. p  _- S. ^* y
}, B$ r: A9 Q7 m6 w+ M7 c6 m
public void print(){
$ g. w7 A- Z& c- p* S" [: b8 ESystem.out.println(“Name=”+name+“ Age=”+age);//在此行中并不需要用this,因为没有会导致混淆的东西  I5 @2 E  S' a0 \& o9 u
}5 n5 R2 W# w; X, y8 X3 u8 r8 I" M
public static void main(String[] args){
2 @8 ?. t6 p! c+ g. o, rDemoThis dt=new DemoThis(“Kevin”,“22”);! j; B, _& A' p: _' x( f
}# u: R" r; u% D/ l, V2 O0 T$ u: l- |
}; C3 ~8 B) u6 B- r) w5 H% y2 J
这段代码很简单,不用解释你也应该能看明白。在构造函数中你看到用this.print(),你完全可以用print()来代替它,两者效果一样。下面我们修改这个程序,来演示super的用法。
, L7 [" P* Q. r+ C5 q- @7 Aclass Person{
- C6 r3 {' e( H; G1 y7 Upublic int c;
1 A) ~7 r% U% a4 v+ J- F* |private String name;  Z" M# N) v$ m' g+ ]
private int age;
  C4 h9 n5 x1 Wprotected void setName(String name){( ?8 G0 e( _. |1 z, P# k
this.name=name;0 v+ a! U5 w: F2 P# f1 s
}
3 H9 {' Y6 K* r" H. Eprotected void setAge(int age){& \; n/ d3 e. v) k( W8 N# `
this.age=age;
0 _- a+ ^# B! I}
2 K- b7 R5 ]/ g9 vprotected void print(){
% X3 j! C; f( p' ]System.out.println(“Name=”+name+“ Age=”+age);0 o+ H" y5 K! i3 M; P
}
5 ^0 T4 l( U$ W' u, U. c$ Y}' n: v, j+ d7 v( T
public class DemoSuper extends Person{; g7 O5 {% s8 |+ r9 ~; T! Q( [; L
public void print(){( ?8 K& s% E# O7 Z: G" x8 F- o
System.out.println(“DemoSuper:”);, x: \4 J9 ~9 d( C/ T
super.print();9 w1 a3 i$ G/ v1 E2 O) H
}: {) t, s' H& I+ O8 y8 \
public static void main(String[] args){5 A8 B8 A- T& i6 d2 s
DemoSuper ds=new DemoSuper();/ O) S  T) R: C! G( \0 h
ds.setName(“kevin”);) t' B( z* E8 A' q( S7 H$ J  w& g
ds.setAge(22);
1 b9 R8 k( o8 R; G# Mds.print();/ I% m' P9 i; Q& v  W- j. E1 a
}
! c1 A! O) e! M, g. h4 a}
( p: K5 i: y$ o" Y, S在DemoSuper中,重新定义的print方法覆写了父类的print方法,它首先做一些自己的事情,然后调用父类的那个被覆写了的方法。输出结果说明了这一点:
4 ]0 J" V8 Y; ~( G( f" hDemoSuper:2 {8 ?& X  \, X  U  ^% b) V
Name=kevin Age=22
) ^" F' A' a& N$ W$ S/ f这样的使用方法是比较常用的。另外如果父类的成员可以被子类访问,那你可以像使用this一样使用它,用“super.父类中的成员名”的方式,但常常你并不是这样来访问父类中的成员名的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-13 01:34 , Processed in 0.186396 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表