close

不同package存取類別的Protected資料成員

package A;
public class Base{
    private int privateData=0;
    protected int protectedData=1;
    int packageData=2;
    public int publicData=3;

    public Base(){
    }    

    public void publicMethod(){
        System.out.format("publicMethod called%n");
    }

    private void privateMethod(){
        System.out.format("privateMethod called%n");
    }

    void packageMethod(){
        System.out.format("packageMethod called%n");
    }
    
    protected void protectedMethod(){
        System.out.format("protectedMethod called%n");
     }
}

package B;
import A.Base;
class Subclass extends Base{    
    public static void main(String[] args){
        Base b=new Base();
        //b.privateMethod();//illegal
        //b.packageMethod();//illegal
        //b.protectedMethod();//illegal
        b.publicMethod();//legal 不同package只能呼叫public成員

        //System.out.format("privateData:  %2d%n",b.privateData);//illegal
        //System.out.format("packageData:  %2d%n",b.packageData);//illegal
        //System.out.format("protectedData: %2d%n",b.protectedData);//illegal
        System.out.format("publicData: %2d%n",b.publicData);//legal

        Subclass s=new Subclass();

        s.publicMethod();//legal
        s.protectedMethod();//legal protected資料可由他的子類別存取
        System.out.format("protectedData: %2d%n",s.protectedData);//legal
        //s.packageMethod();//illegal
        //System.out.format("packageData: %2d%n",s.packageData);//illegal 跨package不能使用package變數

        //System.out.format("privateData:  %2d%n",s.privateData);//illegal private變數不能繼承

        
    }    

}

存取權限開放的大小

public > protected > package(default) > private

class的權限如未被開啟,則裡面的資料就算是public也不能被存取。

引用自http://life.csu.edu.au/java-tut/java/javaOO/accesscontrol.html

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 roczen2007 的頭像
    roczen2007

    roczen2007

    roczen2007 發表在 痞客邦 留言(0) 人氣()