iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
自我挑戰組

Java SE系列 第 8

Day08:別為了錢而放棄權力

今天來談談修飾子(Modifier)。

修飾子我覺得可以分為三大類,第一種就是封裝用的修飾子,第二種為宣告屬性或方法是否為靜態,第三種是final。

  1. 封裝用修飾子
    封裝用修飾子有4種:public, protected, default, private。其中default修飾子在程式中的表達方式是不需要註明,直接留空就代表你要讓類別或者屬性、方法為default的範圍了。
    而封裝用修飾子的對象有4種:class, field, method, constructor。
    我時常覺得,只要當我們研究的事物開始有一個以上的維度後,就不是那麼容易了,因為交互影響下就會產生很多可能,而有些可能就會變成特例,就需要時間來思考學習了,但也要清楚,這些的目的都是為了表達出我們想設計的程式而產生的規則。
  • 類別可以宣告protected或private嗎?
    不能,因為沒有意義。但是內部類別(inner class)可以。
  • 如果類別宣告為default,但是有的成員為public,那這個public成員是不是有點怪怪的?
    沒有錯,這個public成員是有點沒意義的,因為最終包裹這個成員的類別只能被同套件(package)的類別取用,不過這樣的程式是可以編譯並執行的。
  • 如果類別被其他類別繼承,那private的成員也有被繼承到嗎?
    不會呦。(JLS8.2)
  1. 靜態(Static)
    剛剛提到的學習維度問題,很遺憾的static讓它又增加了一個維度。不過只要了解到,靜態修飾子的目的就是讓類別中的成員變成是類別所擁有、公用的,而不是在創建實例後讓各個實例擁有的成員。會叫做靜態就是這個意思,因為被宣告維靜態的成員在JVM類別載入後就成立了,而不是在創建實例時才成立,所以有靜態的意味。
    能夠被宣告維static的成員有field, method, inner class, block(程式區塊,這部分之後應該會寫一篇)。

  2. final
    一般我們在程式要存放值的時候,就會宣告出一個變數來存; 那我們是不是可以在之後用同樣的變數存放其他的值? 當然可以囉,不過原本存放的值就會被蓋掉了,這種現象叫做狀態(state)改變。那可不可以讓變數在儲存一個值之後,就不可以指派其他值進去? 可以的,這時候就需要用到final修飾子,它可以讓變數成為常數(constant)。
    final的對象可以為class, field, method; 如果為class或method,就代表對象無法被繼承或被覆寫。

  • 可不可以同時宣告某個成員為static以及final?
    可以,同時宣告static final就表示該成員在類別載入時就已創建完成,而且不可被修改,絕對的常數。

目前能想到的就這些了,總感覺還有很多種可能沒想到,真毛。


上一篇
Day07:始祖巨人
下一篇
Day09:四驅車的殼
系列文
Java SE30

尚未有邦友留言

立即登入留言