被误解的protected

父类:

1package com.quitgame.common;
2
3public class Parent {    
4    protected int i;
5}

同包子类

 1package com.quitgame.common;
 2
 3public class Son extends Parent{
 4
 5    /**
 6     * @param args
 7     */

 8    public static void main(String[] args) {
 9        Son s = new Son();
10        s.i += 7//OK,in the son class.
11        
12        Parent p = new Parent();
13        p.i ++//OK,in the same package.
14    }

15    
16    public void testProtected(){
17        this.i ++//OK,in the son class.
18    }

19}

同包非子类

 1package com.quitgame.common;
 2
 3public class ClassInSamePackage {
 4    /**
 5     * @param args
 6     */

 7    public static void main(String[] args) {
 8        Son c = new Son();
 9        c.i ++;   //OK, in the same package .
10    }

11}

非同包子类

 1package test;
 2
 3import com.quitgame.common.Parent;
 4
 5public class SonInAnotherPackage extends Parent{
 6
 7    /**
 8     * @param args
 9     */

10    public static void main(String[] args) {        
11        Parent p = new Parent();
12        //p.i ++; //error , not in the same package , not access througth this son class.
13    }

14    
15    public void test(){
16        super.i ++//OK,in the son class.
17        this.i ++;  //OK,in the son class.
18    }

19
20}

21

public > protected > package > private

protected 除了可以在子类中访问,还可以在同包中访问。
这次IT大比武,栽在这个修饰符上了。

posted @ 2007-06-03 10:31 quitgame 阅读(...) 评论(...) 编辑 收藏