從實踐認識修飾符
從實踐認識修飾符
1 修飾符分類
說到修飾符,大家都知道有private deafult protect public,說到它們的區別,相信大家腦海會出現一張圖。
同一個類 | 同包非子類 | 子類 | 不同包非子類 | |
---|---|---|---|---|
private | 是 | 否 | 否 | 否 |
default | 是 | 是 | 否 | 否 |
protected | 是 | 是 | 是 | 否 |
public | 是 | 是 | 是 | 是 |
那麼怎麼從程式碼層面解釋呢,學東西不能停留在理論層面,畢竟只是一份實踐的工作。所以請看下面講解,畢竟實踐才是檢驗真理的唯一標準,說白了就是寫一些demo,驗證一下,工作中我們不瞭解某個方法或者某個類的時候,本人推薦寫一些demo,做一些test,本人覺得這是技巧之一。
2 程式碼展示
本例項訪問方法只有兩種
- 建立物件訪問,形成組合關係
- 繼承類,形成繼承關係
2.1 引入必要的maven
寫demo驗證自己想法時候,推薦使用test框架,不同每次都寫一個main方法,只要一個註解@test就能解決問題
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>compile</scope> </dependency>
也可以使用slf4j框架來列印資訊
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.6.4</version> </dependency>
也可以使用lombok框架,實現註解@getter和@setter代替getter方法和setter方法
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.16</version> </dependency>
2.2 private
需要建立物件 呼叫類中屬性
2.2.1 例項
package classtest; import lombok.Getter; import lombok.Setter; import org.junit.Test; /** * @Author buer * @create 2019/4/28 10:06 * @description 父類 */ @Getter@Setter public class Animal { public int id = 1; private String name="chen"; protected String parent = "parent"; @Test public void eat(){ Animal animal= new Animal(); System.out.println(animal.name); } }
2.2.2 結果
chen
ps:貼圖很麻煩 就貼字了
2.2.3 結論
在本類建立物件可以直接訪問private屬性欄位
2.3 default
建立物件,訪問屬性
2.3.1 例項
package classtest; @Getter @Setter public class Classtest { @Test public void defaultTest(){ Animal animal= new Animal(); System.out.println(animal.name); } }
另一個類name屬性改變--》protected
package classtest; @Getter @Setter public class Animal { private int id; String name="chen"; protected String parent; }
2.3.2 結果
chen
2.3.3 結論
在同一個包中建立物件可以直接訪問,不同包下建立物件不能訪問default 預設屬性欄位,例子省略
2.4 protected
繼承父類,不需要建立父類物件,直接訪問protected屬性欄位
2.4.1 例項
package butong; import classtest.Animal; import org.junit.Test; /** * @Author buer * @create 2019/5/4 14:37 * @description */ public class Animalbutong extends Animal{ @Test public void defaultTest(){ System.out.println(parent); } }
2.4.2 結果
chen
2.4.3 結論
在子類中可以直接進訪問父類欄位,不需要建立物件
2.5 public
在不同包以及非子類關係下,建立物件可以訪問public屬性欄位
2.5.1 例項
test屬性是public
package butong; import classtest.Animal; import org.junit.Test; /** * @Author buer * @create 2019/5/4 14:37 * @description */ public class Animalbutong { @Test public void defaultTest(){ Animal animal = new Animal(); System.out.println(animal.test); } }
2.5.2 結果
chen
2.5.3 結論
在不同包以及非子類關係下,建立物件可以訪問public屬性欄位
公眾號