從實踐認識修飾符

從實踐認識修飾符

1 修飾符分類

說到修飾符,你們都知道有private deafult protect public,說到它們的區別,相信你們腦海會出現一張圖。java

  同一個類 同包非子類 子類 不一樣包非子類
private
default
protected
public

那麼怎麼從代碼層面解釋呢,學東西不能停留在理論層面,畢竟只是一份實踐的工做。因此請看下面講解,畢竟實踐纔是檢驗真理的惟一標準,說白了就是寫一些demo,驗證一下,工做中咱們不瞭解某個方法或者某個類的時候,本人推薦寫一些demo,作一些test,本人以爲這是技巧之一。api

2 代碼展現

本實例訪問方法只有兩種框架

  1. 建立對象訪問,造成組合關係
  2. 繼承類,造成繼承關係

2.1 引入必要的maven

寫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>

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:貼圖很麻煩 就貼字了ip

2.2.3 結論

在本類建立對象能夠直接訪問private屬性字段rem

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屬性字段

公衆號

相關文章
相關標籤/搜索