從實踐認識修飾符

布林bl發表於2019-05-04

從實踐認識修飾符

1 修飾符分類

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

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

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

2 程式碼展示

本例項訪問方法只有兩種

  1. 建立物件訪問,形成組合關係
  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屬性欄位

公眾號

從實踐認識修飾符

相關文章