1. 程式人生 > 其它 >訪問修飾符protected和default的區別,成員變數和區域性變數

訪問修飾符protected和default的區別,成員變數和區域性變數

修飾類只有public和default(也就是是不寫訪問修飾符)

 

修飾成員變數或成員方法時有四種

public              可以被任意包中的類訪問

protected             可以被同一包下的其他類訪問(包括同一包下的子類),其他包的子類可以訪問

default(也就是什麼都不寫)     可以被同一包下的其他類訪問(包括同一包下的子類),其他包的子類無法訪問

private              僅自己能訪問

 

測試protected和default的區別

同一包下 他倆是一樣的 這是測試不同包下

測試protected  不同包下的子類是否能訪問父類中protected修飾的方法

package com.wz.text01.p1;

/**
* Created by IntelliJ IDEA.
*
* @author Donkey
* Date: 2022/4/15
* Time: 11:54
*/
public class TestProtected {

protected String name = "wz";

protected void show(){
System.out.println("TestProtected中的show方法");
}

}
此時只能new子類物件訪問
package com.wz.text01.p2;

import com.wz.text01.p1.TestProtected;

/**
* Created by IntelliJ IDEA.
*
* @author Donkey
* Date: 2022/4/15
* Time: 11:55
*/
public class Test extends TestProtected {

public static void main(String[] args) {
Test test = new Test();
test.show();
System.out.println(test.name);

}

}

 

 


並且不能使用多型,即 TestProtected test=new Test() 這樣會出錯

 

 

 

測試default  不同包下的子類是否能訪問父類中default(預設)的方法

package com.wz.text01.p2;

import com.wz.text01.p1.TestDefault;

/**
* Created by IntelliJ IDEA.
*
* @author Donkey
* Date: 2022/4/15
* Time: 12:09
*/
public class Test02 extends TestDefault {

public static void main(String[] args) {
Test02 test02 = new Test02();
test02.show();
}
}

 

 

 

 

 

成員變數和區域性變數的區別

  成員變數:

    1.成員變數定義在類內,方法外,是屬於類的概念

    2.成員變數都有預設的初始值

    3.未被static修飾的成員變數也叫例項變數,儲存在堆記憶體中,生命週期與例項化的物件一致(也就是new物件的時候生成,gc回收物件的時候死亡)

    4.被static修飾的成員變數也叫類變數,儲存在方法區記憶體中,生命週期與當前類一致

  區域性變數:

    1.定義在類中方法內

    2.沒有預設的初始值,需要手動賦初值

    3.儲存在棧記憶體中,隨著方法結束而銷燬