1,繼承的定義
子類的成員中有一部分是子類自己申明定義的,另一部分是從他的父類繼承的。子類繼承父類的成員變量作為自己的一個成員變量,就好像他們是在子類中直接
申明一樣,可以被子類中自己的任何實例方法操作。也就是說,一個子類繼承的成員應當是這個類的完全意義的成員,如果子類中申明的實例方法不能操作父類
的某個成員變量,該成員變量就沒有被子類繼承,子類繼承父類的方法作為子類中的方法,就像他們是在子類中直接聲一樣,可以被子類中自己聲明的刃虎實例
方法調用。
2.子類父類在一個包中的情況
子類可以繼承父類中的除了private的成員變量和方法,作為自己的成員變量和方法。繼承的成員變量和方法的訪問權限是不變的。
項目結構:
http://www.cnblogs.com/hongten/gallery/image/112682.html
/test/src/com/b510/Parent.java
1 package com.b510;
2
3 /**
4 * @author Hongten
5 *
6 * @time 2012-3-13 2012
7 */
8 public class Parent {
9 private int numbera = 10;
10 protected int numberb = 20;
11
12 /**
13 * 友元函數sum()
14 */
15 void sum() {
16 numberb = numbera + numberb;
17 System.out.println(numberb);
18 }
19
20 /**
21 * 獲得numbera,此方法是private
22 *
23 * @return numbera
24 */
25 private int getNumbera() {
26 System.out.println(numbera);
27 return numbera;
28 }
29
30 /**
31 * 此方法是public類型的
32 */
33 public void print() {
34 System.out.println("numberb+numbera=" + (numberb + numbera));
35 }
36
37 /**
38 * 此方法是protected類型的
39 */
40 protected void say() {
41 System.out.println("Hello,i'm parent class!");
42 }
43 }
/test/src/com/b510/ParentAndSubClass.java
1 package com.b510;
2
3 /**
4 * @author Hongten
5 *
6 * @time 2012-3-13 2012
7 */
8 public class ParentAndSubClass {
9 public static void main(String[] args) {
10 SubClass sub = new SubClass();
11 // 繼承父類中的方法
12 sub.say();
13 sub.sum();
14 sub.print();
15 // 子類自己的方法
16 sub.proFun();
17 sub.youYuan();
18 }
19
20 }
/test/src/com/b510/SubClass.java
1 package com.b510;
2
3 /**
4 * @author Hongten
5 *
6 * @time 2012-3-13 2012
7 */
8 public class SubClass extends Parent {
9
10 /**
11 * 友元方法
12 */
13 void youYuan() {
14 System.out.println("子類不能繼承numbera,但能繼承numberb=" + numberb);
15 System.out.println("這是子類中的友元方法");
16 }
17
18 /**
19 * private方法
20 */
21 private void priFun() {
22 System.out.println("這是private方法");
23 }
24
25 /**
26 * protected方法
27 */
28 protected void proFun() {
29 System.out.println("子類中可以繼承numberb=" + numberb);
30 }
31
32 }
運行結果:
1 Hello,i'm parent class!
2 30
3 numberb+numbera=40
4 子類中可以繼承numberb=30
5 子類不能繼承numbera,但能繼承numberb=30
6 這是子類中的友元方法
總結:子類和父類在同一個包中的時候,子類不能繼承父類的含有private的變量和方法。
3.子類和父類不在同一個包的情況
項目結構:
http://www.cnblogs.com/hongten/gallery/image/112683.html
/test/src/com/Parent.java
1 package com;
2
3 /**
4 * @author Hongten
5 *
6 * @time 2012-3-13 2012
7 */
8 public class Parent {
9 private int numbera = 10;
10 protected int numberb = 20;
11
12 /**
13 * 友元函數sum()
14 */
15 void sum() {
16 numberb = numbera + numberb;
17 System.out.println(numberb);
18 }
19
20 /**
21 * 獲得numbera,此方法是private
22 *
23 * @return numbera
24 */
25 private int getNumbera() {
26 System.out.println(numbera);
27 return numbera;
28 }
29
30 /**
31 * 此方法是public類型的
32 */
33 public void print() {
34 System.out.println("numberb+numbera=" + (numberb + numbera));
35 }
36
37 /**
38 * 此方法是protected類型的
39 */
40 protected void say() {
41 System.out.println("Hello,i'm parent class!");
42 }
43 }
/test/src/com/b510/ParentAndSubClass.java
1 package com.b510;
2
3 /**
4 * @author Hongten
5 *
6 * @time 2012-3-13 2012
7 */
8 public class ParentAndSubClass {
9 public static void main(String[] args) {
10 SubClass sub = new SubClass();
11 // 繼承父類中的方法
12 sub.say();
13 sub.print();
14 // 子類自己的方法
15 sub.proFun();
16 sub.youYuan();
17 }
18
19 }
/test/src/com/b510/SubClass.java
1 package com.b510;
2
3 import com.Parent;
4
5 /**
6 * @author Hongten
7 *
8 * @time 2012-3-13 2012
9 */
10 public class SubClass extends Parent {
11
12 /**
13 * 友元方法
14 */
15 void youYuan() {
16 System.out.println("子類不能繼承numbera,但能繼承numberb=" + numberb);
17 System.out.println("這是子類中的友元方法");
18 }
19
20 /**
21 * private方法
22 */
23 private void priFun() {
24 System.out.println("這是private方法");
25 }
26
27 /**
28 * protected方法
29 */
30 protected void proFun() {
31 System.out.println("子類中可以繼承numberb=" + numberb);
32 }
33
34 @Override
35 protected void say() {
36 System.out.println("這是重寫父類的protected方法,say(),還可以得到numberb=" + numberb);
37 }
38 }
運行結果:
1 這是重寫父類的protected方法,say(),還可以得到numberb=20
2 numberb+numbera=30
3 子類中可以繼承numberb=20
4 子類不能繼承numbera,但能繼承numberb=20
5 這是子類中的友元方法
總結:子類和父類不在同一個包,子類可以繼承protected,public變量和方法,繼承的成員或方法的訪問權限不變,但子類不能繼承父類的友好(友元)變量和友好(友元)方法。
