• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Java面向對象
    Java異常
    Java數組
    Java常用類
    Java集合
    Java IO流
    Java線程
    Java反射
    Socket編程
    Java注解開發
    Java GoF設計模式
    HashMap
    Java內存模型
    Java線性表

    Java訪問權限

     

     

    Java類的訪問權限

     

    Java類的訪問權限有兩種:

     

    公共類和非公共類

     

    使用public修飾的類為公共類,沒有使用public修飾的類為非公共類。

     

    公共類的應用場景

     

    如果這個類想要在其他包中使用就定義為公共類

     

    非公共類只能在當前包中使用

     

     

    Java類成員的訪問權限

     

    訪問權限

    當前類

    當前包

    派生類(不在當前包中)

    其他包

    私有的(private)

    可以

    默認的(沒有權限修飾符)

    可以

    可以

    受保護的(protected)

    可以

    可以

    可以

    公共的(public)

    可以

    可以

    可以

    可以

     

    在定義類的成員時,遵循訪問權限最小化的原則。

     

    如果想在任意位置都可以使用,就定義為public公共的。

     

    如果想在當前類和派生類中都可以直接使用,就定義為protected受保護的。

     

    package com.bjpowernode.chapter01.demo02.p1;
    
    public class Father {
    	private int xx = 10;		//私有的, 只能在當前類中使用
    	int yy =  20;				//默認的, 可以在當前包中使用
    	protected int zz = 30;		//受保護的, 當前包/派生類中使用
    	public int oo = 40;			//公共的, 任意位置
    	
    	//在當前類中
    	public void m1() {
    		System.out.println( xx );
    		System.out.println( yy );
    		System.out.println( zz );
    		System.out.println( oo );
    	}
    	
    }

     

    package com.bjpowernode.chapter01.demo02.p1;
    /**
     * 測試訪問當前包中Father類的成員權限
     * 	在同一個包中,可以使用默認權限/受保護權限/公共權限的成員 ,不能使用私有成員
     * @author Administrator
     *
     */
    public class Test {
    
    	public static void main(String[] args) {
    		//創建Father類的對象
    		Father f = new Father();
    		//訪問f的實例成員
    		System.out.println(f.xx);  	//The field(字段/域) Father.xx is not visible(不可見), 沒有訪問權限
    		System.out.println(f.yy);	
    		System.out.println(f.zz);
    		System.out.println(f.oo);
    	}
    
    }

     

    package com.bjpowernode.chapter01.demo02.p2;
    
    import com.bjpowernode.chapter01.demo02.p1.Father;
    
    /**
     * 在p2包中, 測試訪問p1包中Father類的成員權限
     * 		只能訪問公共成員 
     * @author Administrator
     *
     */
    public class Test02 {
    
    	public static void main(String[] args) {
    		Father f = new Father();
    		
    		//訪問f的成員變量
    		System.out.println(f.xx);  	//The field(字段/域) Father.xx is not visible(不可見), 沒有訪問權限
    		System.out.println(f.yy);	
    		System.out.println(f.zz);
    		System.out.println(f.oo);
    	}
    
    }
    

     

    package com.bjpowernode.chapter01.demo02.p3;
    
    import com.bjpowernode.chapter01.demo02.p1.Father;
    /**
     * p3包中定義Son類, 繼承p1包中的Father類
     * 		子類繼承了父類, 就自動擁有了父類的實例變量與實例方法
     * 		Son類從Father類繼承了四個實例變量:xx,yy,zz,oo,和一個實例方法: m1()
     * @author Administrator
     *
     */
    public class Son extends Father {
    	//Son類從Father類繼承了四個實例變量:xx,yy,zz,oo
    	
    	//子類的實例方法
    	//因為繼承,所有自動擁有, 是否能夠直接使用,跟訪問權限有關
    	public void sm() {
    		System.out.println( xx );
    		System.out.println( yy );
    		System.out.println( zz ); 		//受保護的
    		System.out.println( oo );
    	}
    }

     

     

    Java方法覆蓋中的訪問權限

     

    Java訪問覆蓋(重寫)的規則:

     

    ● 子類方法簽名必須和父類方法一致, 方法簽名就是方法名與參數列表

     

    ● 子類方法的返回值類型可以和父類方法返回值類型一樣, 也可以是父類方法返回值類型的子類型

     

    ● 子類方法的訪問權限可以和父類方法訪問權限相同,也可以比父類方法訪問權限更寬泛(更大)

     

    如果父類方法是public修飾,子類方法只能是public修飾

     

    如果父類方法是protected修飾,子類方法可以protected/public修飾

     

    ● 子類方法的異常不能比父類方法的異常更大

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏