說到修飾符,你們都知道有private deafult protect public,說到它們的區別,相信你們腦海會出現一張圖。java
同一個類 | 同包非子類 | 子類 | 不一樣包非子類 | |
---|---|---|---|---|
private | 是 | 否 | 否 | 否 |
default | 是 | 是 | 否 | 否 |
protected | 是 | 是 | 是 | 否 |
public | 是 | 是 | 是 | 是 |
那麼怎麼從代碼層面解釋呢,學東西不能停留在理論層面,畢竟只是一份實踐的工做。因此請看下面講解,畢竟實踐纔是檢驗真理的惟一標準,說白了就是寫一些demo,驗證一下,工做中咱們不瞭解某個方法或者某個類的時候,本人推薦寫一些demo,作一些test,本人以爲這是技巧之一。api
本實例訪問方法只有兩種框架
寫demo驗證本身想法時候,推薦使用test框架,不一樣每次都寫一個main方法,只要一個註解@test就能解決問題maven
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>compile</scope> </dependency>
也能夠使用slf4j框架來打印信息spa
<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方法code
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.16</version> </dependency>
須要建立對象 調用類中屬性對象
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); } }
chen繼承
ps:貼圖很麻煩 就貼字了ip
在本類建立對象能夠直接訪問private屬性字段rem
建立對象,訪問屬性
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; }
chen
在同一個包中建立對象能夠直接訪問,不一樣包下建立對象不能訪問default 默認屬性字段,例子省略
繼承父類,不須要建立父類對象,直接訪問protected屬性字段
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); } }
chen
在子類中能夠直接進訪問父類字段,不須要建立對象
在不一樣包以及非子類關係下,建立對象能夠訪問public屬性字段
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); } }
chen
在不一樣包以及非子類關係下,建立對象能夠訪問public屬性字段