</p> public void print(){
4 b0 v& ?( [& ?, }/ a; G6 S6 } System.out.println("Name="+name+" Age="+age);//在此行中并不需要用this,因为没有会导致混淆的东西
' q- \! C2 D$ i4 d1 Q2 Q5 i }; ?- X; J5 ?2 N
public static void main(String[] args){
2 J9 {. c7 ]+ G* Q: @" | DemoThis dt=new DemoThis("Kevin","22");0 x( K2 R* _5 ?7 t, c% d, s
}
/ N- E/ x1 c% B2 c" g8 O; N }. x! _, Y' r6 n: Z( I9 h0 V* e
这段代码很简单,不用解释你也应该能看明白。在构造函数中你看到用this.print(),你完全可以用print()来代替它,两者效果一样。下面我们修改这个程序,来演示super的用法。
{9 l) X3 C d5 Z9 _ class Person{+ d+ m, C, z% T7 v# U1 H6 G' ]
public int c;1 K4 X/ m7 j9 v
private String name;8 A( K* m& e( k3 S# i
private int age;; t" G9 o( i( ]( B q8 S
protected void setName(String name){
1 p" [: r: x/ J) I2 j6 F this.name=name;
1 N/ b) w5 i$ H( m% { }/ x! Z o8 M: a# R! ?
protected void setAge(int age){4 H& y% R" _( W; r+ v( y9 V. N
this.age=age;
4 f: d& o* M9 _1 X. S1 l( Y: E }) Y% K: ?1 K' _0 n* @6 A* c( B" w1 ? s& O
protected void print(){
2 X8 T+ r. ]! U5 u, e G' R) } System.out.println("Name="+name+" Age="+age);
, z; I( j4 Z7 d1 J2 i }6 F4 Y B% M4 W! C
}. ~7 f, G# P3 X2 @1 U6 e7 t
public class DemoSuper extends Person{
2 V9 @% u5 N5 u. w; V+ D) w public void print(){" S3 L3 P. y; o2 r: [' [/ t: e6 v: F9 |
System.out.println("DemoSuper:");7 N3 V' w U: W
super.print();
( \1 m0 |& s- B* D# Z }
% i) B3 l" c$ s( m: B public static void main(String[] args){! V R8 J5 `" l- C
DemoSuper ds=new DemoSuper();
( s' L: G8 w5 e% n2 X! d ds.setName("kevin");6 s* }! l. K+ H2 ~
ds.setAge(22);2 q4 u) q* S! |7 J
ds.print();
6 k% ^" K- D/ Z4 p }
: f% m; u/ s- a* m2 m" b }. [" |, H- W& w8 C3 p; k- h
在DemoSuper中,重新定义的print方法覆写了父类的print方法,它首先做一些自己的事情,然后调用父类的那个被覆写了的方法。输出结果说明了这一点:( M" y' |; s9 |5 W/ `9 }# b. G
DemoSuper:: `0 @6 u5 X& P N
Name=kevin Age=226 @6 ?0 _0 ~# s8 ?
这样的使用方法是比较常用的。另外如果父类的成员可以被子类访问,那你可以像使用this一样使用它,用“super.父类中的成员名”的方式,但常常你并不是这样来访问父类中的成员名的。
+ O1 A/ ^ O( \& ?. k% o, A 在构造函数中$ w, n, Y% H4 \. E2 X/ K
构造函数是一种特殊的方法,在对象初始化的时候自动调用。在构造函数中,this和super也有上面说的种种使用方式,并且它还有特殊的地方,请看下面的例子:* m" H+ M" T& M% K& X: N2 B
class Person{" @: \# a2 X: ~. X [; t
public static void prt(String s){2 p; v1 H6 Z6 v. k6 {5 v
System.out.println(s);
' H s2 D5 C- \: k1 a& Z
( T/ Y' ?: `6 A; u/ ~ } |