Java中子类的继承性

原文出处:http://www.cnblogs.com/hongten/archive/2012/03/13/java_parent_son_subclass.html


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变量和方法,继承的成员或方法的访问权限不变,但子类不能继承父类的友好(友元)变量和友好(友元)方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值