</p> 这段代码很简单,不用解释你也应该能看明白。在构造函数中你看到用this.print(),你完全可以用print()来代替它,两者效果一样。下面我们修改这个程序,来演示super的用法。: Q7 |4 Q. h0 F- p7 w
class Person{$ l8 M5 ]( H4 `/ z0 G) H5 y+ h
public int c;4 Q0 Z" q0 b; Q4 y, W; X( G
private String name;6 F1 e5 r0 a+ \) X) z ^ c
private int age;$ U# d8 l& c' H9 O& F5 [
protected void setName(String name){
, i& U( ^' c' A, K5 r this.name=name;. K1 h& ]7 \% z; ~9 y& ]4 t
}2 C& A. t1 g! B$ n' G
protected void setAge(int age){' t/ g6 @4 i/ H& M' H( U
this.age=age;
8 B! M1 q- i/ E8 |' Z }9 y# q( Y# t& ^# j
protected void print(){
* U8 F% W4 X: _) M9 o. i% n System.out.println("Name="+name+" Age="+age);
0 o7 B) i9 ]8 a/ _' A+ i; y }
7 o- ~: L* k0 Y! E" I }
D3 X7 {& z5 b2 e public class DemoSuper extends Person{
9 t" J' `/ b+ w3 R8 G& _ public void print(){- a" `( \: \& Z' L
System.out.println("DemoSuper:");
s+ I% E5 x* Y6 C- Y super.print();
3 k( X, }; {4 K* W% I- h" Z }
4 G, y4 q% b- B F public static void main(String[] args){
5 U: D. n! f; _ v. } DemoSuper ds=new DemoSuper();
/ i: q5 |3 l9 U# B }/ U0 \ ds.setName("kevin");
$ p& M0 c( x# z( C: V' d+ F( Z ds.setAge(22);: h/ j/ E! u5 X# n
ds.print();
. |5 i: Y* Q0 C }
+ j8 T! L1 w; N: `& t5 j2 @ }
- } u$ u' h! I5 c# C' i 在DemoSuper中,重新定义的print方法覆写了父类的print方法,它首先做一些自己的事情,然后调用父类的那个被覆写了的方法。输出结果说明了这一点:
% B: }1 B; V. W+ q, R0 Z DemoSuper:
6 m) k( t6 j1 {5 x) u- H& b Name=kevin Age=22- s) O$ o1 T, ~6 S6 n, O8 \
这样的使用方法是比较常用的。另外如果父类的成员可以被子类访问,那你可以像使用this一样使用它,用“super.父类中的成员名”的方式,但常常你并不是这样来访问父类中的成员名的。% V3 f4 }, G3 O( a: z' y/ V
在构造函数中
8 L# \; x" c7 O! P9 @ 构造函数是一种特殊的方法,在对象初始化的时候自动调用。在构造函数中,this和super也有上面说的种种使用方式,并且它还有特殊的地方,请看下面的例子:
. a/ v1 o. s/ @# F class Person{
! d6 c1 E- U2 k- O/ N public static void prt(String s){
$ B' b E f8 V$ P0 k$ F& j4 i System.out.println(s);1 |7 H* T4 K( p
}
2 U7 K- {% L9 z8 X& R Person(){5 Y, Z% q) ^) k- w( N+ B( J. T
prt("A Person.");
8 f1 @: k4 \' i2 T: |8 I, F- ] }3 h1 ]7 Z: }6 W/ V
Person(String name){
0 b- c' b* Q: p prt("A person name is:"+name);% g$ O% E# P4 V: n, y) D
}4 g$ w* w4 s' e, v2 d6 O
}& F8 A- q3 U& U! j
public class Chinese extends Person{
% ]* R0 [+ R+ S! ` Chinese(){6 F Y5 h, [3 b' ?# L
super(); //调用父类构造函数(1)
7 {% Q0 B2 K# B2 n$ e prt("A chinese.");//(4)$ M' }4 q0 W& \# W. h9 q0 T' D
7 C) Q, X9 I1 |+ h s2 J( T. i
} |