以下,作者讲述了在复习Java担任时的一些心得。看一段简单的代码
7 O! i. ^( j# s3 J1 A4 l/ b! s3 {public class Test {
! i9 `! e0 o" K( W x5 M public static void main(String[] args){; A4 z: p E4 @
B b=new B(0);: \+ I/ E s' ^ h& N" ^
int y=b.getY();! Z u0 @9 G1 g; p
}3 ~0 v" B* j$ I+ X6 W% n$ B+ N- L
}1 R# N7 ?; K s; j
class A {
2 E8 ]- ~2 b; f1 T public static int x=2; //1.* D2 E' _$ V1 q! A, }
private int y=2; //2.
. \: y- S# i: t5 ]2 Q protected int z; //5., ~6 B$ f; ]$ v4 ?
A(){ //3.1 h$ i/ j+ l3 }% S1 s
x=x+1;
]4 f! u" E, t* T+ ?3 k) ^ showX(); //4.% |2 Z& Q# j4 ]/ x5 O% e
}. e! [2 v* j+ m" H
public void showX(){
$ P. Z3 W) W! T* W, p! E9 ^ System.out.println("A.x="+x);+ ^, c8 p" }) y, n4 O
}
7 y2 s$ b) n2 I9 _5 q# [ public int getY(){3 z" i! ^1 z2 D0 ~
return y;
4 X# g% h0 {, g2 w }
! H( u- m5 H& M" M% N}/ W( @2 X* o: f( R% f% q7 Q
class B extends A {
: G: T$ J. \- X/ ` B(int x){( v6 _) E1 m% ^) D, P; D2 R) w
x=x+2; //只对局部x操作
4 `4 c' H# M i/ A! p+ c showX();
, A8 n5 z0 {- \ A+ x* T4 d }/ `, \2 M7 d' i; Z/ C9 e
public void showX(){% c& v/ d9 u8 V6 Q, s
System.out.println("B.x="+x);# D" `# E/ C( a8 |" ^9 a
}) V( _! D8 g. T$ c( z7 z% C
public int getY(){ //6.
7 o0 ~. Y8 G7 n% P/ M$ V System.out.println("B.y="+(super.getY()+x));
# f' W# }+ f+ V return super.getY()+x;3 f j8 n/ @1 g/ _! x2 Z
}% E+ M \1 y; p3 m/ n; D; D: l
}+ F" e4 U* N" D% `5 T5 B+ v f# t+ J
//输出
6 U1 ^ w5 g$ I4 `/ F//B.x=3 //动态绑定
: [, o* [0 P/ e! u$ |//B.x=31 e8 `" U, M( U/ `& F! {
//B.y=5
. _7 @0 v2 |' i, K2 j/ [" [ 1. public static int x被担任到B,成为B的私有域。/ e5 h( c- N; D% X' v) e
2. B中仍然有一个名为y的域,可是无法直接访谒,需要经由过程super.getY()
* x/ i0 v' j+ L 3. 如不美观子类机关函数没有显式挪用超类机关函数,将会自动挪用超类的无参机关函 数,若超类没有无参机关函数,子类中又没有显式挪用,则编译器报错
: K Y8 X) E* k7 m/ K+ j 4. java默认动态绑定机制,若不需要动态绑定章将体例界说为final阻止担任& v! P" `( @: r" L
5. 类A的protected润色符的数据或体例,可以被同个包中的任何一个类访谒(搜罗子类),也可以被分歧包中的A的子类访谒。
/ {6 {3 U- [* q$ v2 C 6. 笼盖一个体例时,子类的体例可见性不能低于父类体例的可见性。 |