首先,我們需要清楚一下方法是由哪些部分構成的:
[權限修飾符列表][別的修飾符列表] 返回值類型 方法名(參數列表){ 方法體;}
然后我們需要知道成員變量和成員方法訪問有幾種情況:1、當前包同一個類 2、當前包里面別的類 3、別的包里別的類 4、自己包繼承關系的類 5、從別的包里有繼承關系的類
第一步先創建一個別的類的代碼,示例:
package com.java;public class admin{ //成員變量的訪問權限 public int i1 = 10; protected int i2 = 20; private int i3 = 30; int i4 = 40;//default(默認)}
然后創建帶main方法的代碼,并創建同包內的class,示例:
package cn.java;import com.java.admin; public class PPP01{ //public class PPP01 extends Customer{ //public class PPP01 extends admin{ //成員變量的訪問權限 public int b1 = 10; protected int b2 = 20; private int b3 = 30; int b4 = 40; public static void main(String[] args){ //相同的包,不同的類,沒有繼承關系 Customer a = new Customer();//未繼承情況下運行 System.out.println( a.i1 ); System.out.println( a.i2 ); System.out.println( a.i3 );//報錯:i3可以在Customer中訪問private System.out.println( a.i4 ); //相同的包,相同的類,沒有繼承關系 PPP01 b = new PPP01(); System.out.println( b.b1 );//都可以運行 System.out.println( b.b2 ); System.out.println( b.b3 ); System.out.println( b.b4 ); //相同的包,不同的類,有繼承關系 Customer c = new Customer(); System.out.println( c.i1 ); System.out.println( c.i2 ); System.out.println( c.i3 );//錯誤: i3可以在Customer中訪問private System.out.println( c.i4 ); //不同的包,不同的類,沒有繼承關系 admin d = new admin(); System.out.println( d.i1 );//在未繼承狀態下運行 System.out.println( d.i2 );//錯誤: i2可以在admin中訪問protected System.out.println( d.i3 );//錯誤: i3可以在admin中訪問private System.out.println( d.i4 );//錯誤: i4在User中不是公共的; 無法從外部程序包中對其進行訪問 //不同的包,不同的類,有繼承關系 admin e = new admin(); System.out.println( e.i1 ); System.out.println( e.i2 );//錯誤: i2可以在admin中訪問protected System.out.println( e.i3 );//錯誤: i3可以在admin中訪問private System.out.println( e.i4 );//錯誤: i4在admin中不是公共的; 無法從外部程序包中對其進行訪問 } }class Customer{ //成員變量的訪問權限 public int i1 = 10; protected int i2 = 20; private int i3 = 30; int i4 = 40;}在不同情況下的運行可得出結果
----------------------成員變量的訪問權限------------------------- public private protected default當前包同一個類 可以 可以 可以 可以當前包里面別的類 可以 不可以 可以 可以別的包里別的類 可以 不可以 不可以 不可以自己包繼承關系的類 可以 不可以 可以(V) 可以(V)從別的包里有繼承關系的類 可以 不可以 可以(V) 不可以(x)
成員方法代碼和變量的代碼差不多,但是要注意,方法需要返回值return,運算后得出結論:
------------------------成員方法的訪問權限--------------------------- public private protected default當前包同一個類 可以 可以 可以 可以當前包里面別的類 可以 不可以 可以 可以別的包里別的類 可以 不可以 不可以 不可以自己包繼承關系的類 可以 不可以 可以(V) 可以(V)
從別的包里有繼承關系的類 可以 不可以 可以(v) 不可以(x)
根據以上結果,可得出結論:
(1)protected:如果跨包的話,必須有繼承關系才可以,自己的包可以直接訪問不受影響
(2)default:跨包就不可以。
(3)在實例化子類變量的時候,可以訪問父類的成員變量,這才可繼承訪問權限
(4)如果在子類中,實例化父類的對象,訪問權限不變
(5)public:不管在成員變量還是成員方法中都可以訪問
以上就是我的理解,請大家多多指導。
歡迎轉載,但請注明出處。
------http://www.survivalescaperooms.com/wing411/---------
新聞熱點
疑難解答