Java protected!

package com.pro;

public class Parent {
    protected int parent = 4;
    protected static int staticPrivate = 3;
    protected void met(){}
    protected static void smet(){}
}

 

package com.pro.child1;

import com.pro.Child0;
import com.pro.Parent;
import com.pro.child2.Child2;
/**
 * 与父类P不在同一个包的某个子类C1,
 * C1只能在C1内部(直接使用或通过生成C1实例的方式)使用P的protected属性或方法。
 * 
 * C1不能通过生成P的C2子类实例的方式来调用C2的extends自P的protected属性或方法,
 * 无论C2与P同包还是与C1同包,或在其他的包。
 * 
 * 与父类P在同一个包的某个子类C3,
 * C3可以通过生成P的C4子类实例的方式来调用C4的extends自P的protected属性或方法,
 * 无论C4在哪个包。
 * 
 * 当P的属性或方法被static修饰时:
 * (无论与父类P在不在同一个包的)某个子类C1可以通过类名C.属性名/方法名的方式调用属性/方法,C是P的任意包的子类。
 * 与类P在同一个包的类O(非P的子类),可以通过类名C.属性名/方法名的方式调用属性/方法名,C是P的任意包的子类。
 * 与类P在不同一个包的类O(非P的子类),在任何情况下都不能通过类名C.属性名/方法名的方式调用属性/方法名。
 * 
 */
public class Child1 extends Parent{
    private void test(){
        System.out.println(this.parent);
        this.met();
        Child1 c1 = new Child1();
        System.out.println(c1.parent);
        c1.met();
        
        System.out.println(Child1.staticPrivate);
        System.out.println(Child2.staticPrivate);
        System.out.println(Child0.staticPrivate);
        Child1.smet();
        Child2.smet();
        Child0.smet();
    }
    private void otherPackBrother(){
        Child2 c2 = new Child2();
        System.out.println(c2.parent);
        c2.met();
    }
    private void samePackBrother(){
        Child1_2 c1_2 = new Child1_2();
        System.out.println(c1_2.parent);
        c1_2.met();
    }
    private void parentPackBrother(){
        Child0 c0 = new Child0();
        System.out.println(c0.parent);
        c0.met();
    }
}

 

package com.pro.child2;

import com.pro.Parent;

public class Child2 extends Parent{
    private void test(){
        System.out.println(this.parent);
    }
}

 

package com.pro.child1;

import com.pro.Parent;

public class Child1_2 extends Parent{

}

 

package com.pro;

import com.pro.Parent;
import com.pro.child1.Child1;
import com.pro.child2.Child2;

public class Child0 extends Parent{
    private void test(){
        System.out.println(this.parent);
        Child0 c1 = new Child0();
        System.out.println(c1.parent);
        
        System.out.println(Child1.staticPrivate);
        System.out.println(Child2.staticPrivate);
        System.out.println(Child0.staticPrivate);
        Child1.smet();
        Child2.smet();
        Child0.smet();
    }
    private void otherPackBrother(){
        Child2 c2 = new Child2();
        System.out.println(c2.parent);
        c2.met();
    }
    private void samePackBrother(){
        Child0_2 c0_2 = new Child0_2();
        System.out.println(c0_2.parent);
        c0_2.met();
    }
}

 

package com.pro;

import com.pro.Parent;

public class Child0_2 extends Parent{

}

 

package com.pro;

import com.pro.Parent;
import com.pro.child1.Child1;
import com.pro.child2.Child2;

public class Other{
    private void test(){
        System.out.println(Child1.staticPrivate);
        System.out.println(Child2.staticPrivate);
        System.out.println(Child0.staticPrivate);
        Child1.smet();
        Child2.smet();
        Child0.smet();
    }
    private void otherPackBrother(){
        Child2 c2 = new Child2();
        System.out.println(c2.parent);
        c2.met();
    }
    private void samePackBrother(){
        Child0_2 c0_2 = new Child0_2();
        System.out.println(c0_2.parent);
        c0_2.met();
    }
}

 

package com.pro.child1;

import com.pro.Child0;
import com.pro.Parent;
import com.pro.child2.Child2;

public class other1 {
    private void test(){
        System.out.println(Child2.staticPrivate);
        System.out.println(Child0.staticPrivate);
        Child1.smet();
        Child2.smet();
        Child0.smet();
    }
    private void otherPackBrother(){
        Child2 c2 = new Child2();
        System.out.println(c2.parent);
        c2.met();
    }
    private void samePackBrother(){
        Child1_2 c1_2 = new Child1_2();
        System.out.println(c1_2.parent);
        c1_2.met();
    }
    private void parentPackBrother(){
        Child0 c0 = new Child0();
        System.out.println(c0.parent);
        c0.met();
    }
}

 

posted @ 2013-12-28 13:52  龍變  阅读(222)  评论(0编辑  收藏  举报