以下,作者讲述了在复习Java担任时的一些心得。看一段简单的代码 * j- X- U" z9 l! `/ e, M4 a6 ~8 G
public class Test {2 X' b( [- `) `) W3 S
public static void main(String[] args){8 F7 e" I) b" b1 G% G5 v6 }/ h
B b=new B(0);
' s/ W: g5 G7 ^# p; {: ` int y=b.getY();$ E4 ^8 d" ~% R1 h
}- [2 e9 K9 _4 @6 U6 d# A" b+ A! _ n6 X$ D
}( C& H3 e. e# j+ P1 J1 W1 A
class A {
/ G X# F1 {# p# t public static int x=2; //1.
* U; d% Z+ D& l9 n& j private int y=2; //2.
1 h) ~ c7 \% m/ m* W- B) O. a m protected int z; //5.
1 g0 g0 S6 U8 G$ i A(){ //3.9 i+ M, \ ?% o
x=x+1;
8 p& r& j! K7 b" i, r- B. G0 j showX(); //4.; Q7 d6 ~6 w+ q
}
7 A2 _+ H# {& D+ @, b P! c D public void showX(){3 \" r+ y6 i$ C R" K
System.out.println("A.x="+x);9 u: A5 b" _" D
}) k: Q6 H. e* U; a4 n! P- H
public int getY(){
) `5 N M1 |* k5 `8 F% m$ v9 _8 g return y;
1 B% L3 n8 n$ V4 z$ K# |# X5 d4 N }
8 j0 x: q0 u1 h; A+ ^) n}+ ?7 m5 ?4 c* H; \/ [) `' l! ?
class B extends A {1 t/ D$ {* J7 J) v8 u d0 V1 P
B(int x){# w; D* p9 b& O. c7 a5 \) a
x=x+2; //只对局部x操作
: H( l/ @, g+ N showX();
8 w4 \6 l6 s# T; q }; r! a: X# y" y. J. n. }
public void showX(){
0 }; [9 o" M% s% M( ^' q9 b1 e System.out.println("B.x="+x);
" g: F3 S) {- I6 a }5 Y- B$ o, E5 h' \5 b$ y* x
public int getY(){ //6.
$ \8 R9 E$ p7 C- Z) E System.out.println("B.y="+(super.getY()+x));9 `8 ]2 _4 t: B U8 t
return super.getY()+x;
5 ~0 [0 K5 @ p! | }
$ \9 }1 G% {8 x7 \0 s}
$ n/ K- F. E, s% e* N6 y. j//输出
+ O+ m! R' e2 w! I. l% m( M//B.x=3 //动态绑定
, L$ @1 e# f0 L) {3 R//B.x=35 M0 f3 z" n; N
//B.y=5
% d0 V2 [7 R8 E/ H/ u' F2 t, @ 1. public static int x被担任到B,成为B的私有域。
: T1 m/ R$ n$ ~$ l" D. t" Q 2. B中仍然有一个名为y的域,可是无法直接访谒,需要经由过程super.getY()
/ W, R D, a! V* ]8 h 3. 如不美观子类机关函数没有显式挪用超类机关函数,将会自动挪用超类的无参机关函 数,若超类没有无参机关函数,子类中又没有显式挪用,则编译器报错5 M- f. y6 e3 z4 B) p( \: I- i! `
4. java默认动态绑定机制,若不需要动态绑定章将体例界说为final阻止担任
+ U- ]& } v) G W# V 5. 类A的protected润色符的数据或体例,可以被同个包中的任何一个类访谒(搜罗子类),也可以被分歧包中的A的子类访谒。
1 E+ s1 @) ]7 l" k& {+ A7 @ 6. 笼盖一个体例时,子类的体例可见性不能低于父类体例的可见性。 |