【第40章】可視性識別子について詳しく解説

【第40章】可視性識別子について詳しく解説 基礎勉強
スポンサーリンク
リンコ
リンコ

こんにちは!リンコですピヨ!この記事では自分の勉強の復習もかねて、Kotlinでの可視性識別子について解説するピヨ!

この第40章では、プログラミング言語であるKotlinの可視性識別子について、一緒に勉強していきましょう。

この記事を読めばプログラミング未経験の方も、Kotlinの可視性識別子について1つ1つ理解しながら勉強できると思うので、是非最後まで読んで頂ければと思います。

※この記事で出てくる「サンプルコード」は、記述が長く画面からはみ出ている場合がありますが、横にスライドすると表示されるのでご安心ください。

スポンサーリンク

【Kotlin】可視性識別子とは?

可視性識別子とは?

まず、可視性識別子とは何かについて勉強していきましょう。

公開範囲を指定するもの

Kotlinではクラスを設計する際やコードを記述していく際に、そのコードを一般公開して他のプログラマにカスタマイズを許すかや、一般公開せず外部には見せないように隠しておく部分を作ったりすることができます。

このようにコードの公開範囲を指定することを、可視性識別子と言います。

可視性識別子を持つことができるものについて

可視性識別子は、クラス、オブジェクト、インタフェース、コンストラクタ、関数などが持つことができます。

可視性識別子には4種類ある

可視性識別子には「public」「private」「protected」「internal」の4種類があります。

この4種類の可視性識別子を、クラス名や関数名の手前につけることで、そのコードの公開範囲を指定することができます。

4種類の違いについては、以下で勉強していきます。

リンコ
リンコ

可視性識別子はコードの公開範囲を指定するもので4種類あるピヨ!

【Kotlin】可視性識別子の4種類の使い方

可視性識別子の4種類の使い方

では可視性識別子の4種類のそれぞれ意味や使い方を勉強していきます。

publicについて

まず「public」は、一般に公開されていてどこからでも見ることができますし、そのクラスや関数にアクセスすることができます。

サンプルコード

以下はpublicを使ったサンプルコードになります。

fun main() {
  val bird = Bird("黒色")
  bird.fly(5.0)  
  bird.fly(10.0) 
}

class Bird(val color: String) {
  var distance = 0.0
  // どこからでもアクセスできるようにpublicをつけた
  public fun fly(d: Double) {
    distance = distance + d
    println("鳥が${d}km飛びました。")
    println("飛んだ距離の合計が${distance}キロになりました。")
  }
}

解説

このコードでは、Birdクラスのfly関数が「public」として定義されています。

publicはどこからでもアクセスできるため、main関数からもアクセスできていますね。

また可視性識別子の記述がないコードに関しては、publicと同様の意味になります。

privateについて

「private」は公開範囲が限られる記述で、クラスで記述するとそのクラス内でしかアクセスできなくなります

サンプルコード

以下はprivateを使ったサンプルコードになります。

class Bird(val color: String) {
  var distance = 0.0
  // クラス内でしかアクセスできないようにprivateをつけた
  private fun fly(d: Double) {
    distance = distance + d
    println("鳥が${d}km飛びました。")
    println("飛んだ距離の合計が${distance}キロになりました。")
  }
}

解説

このコードは、先程のコードのpublicの部分をprivateに書き換えたものになります。

privateはクラス内でしかアクセスができなくなるので、上記のコードではクラス外のmain関数からfly関数を呼び出しているためエラーになります。

protectedについて

「protected」は、クラスであればそのクラスを継承したクラスからのみアクセスできるようになります。

サンプルコード

以下は、protectedを使ったサンプルコードになります。

fun main(){
    val rinko = Rinko("黄色")
    rinko.fly(5.0)
}

open class Bird(val color: String) {
  // 継承クラスのみアクセスできるようにprotectedをつけた
  protected var distance = 0.0
  // どこからでもアクセスできるようにpublicをつけた
  public open fun fly(d: Double) {
    distance = distance + d
    println("鳥が${d}km飛びました。")
    println("飛んだ距離の合計が${distance}キロになりました。")
  }
}

class Rinko (color: String) : Bird(color) {
  override fun fly(d: Double) {
    distance = distance + d
    println("${color}のリンコが飛んでる!パタパタ!")
    println("飛んだ距離は${distance}です。")
  }
}

解説

このコードではdistanceというプロパティ変数を、継承したクラスからのみアクセスできるようにprotectedをつけました。

またfly関数にはpublicをつけていますが、openがついている関数に対して今回の場合「public open」というふうにopenの手前に記述しました。

ただこれは決まりはなく、反対の「open public」でもオッケーです。

internalについて

「internal」は、同一のモジュールの中でのみ関数やクラスにアクセスできるようにするものです。

ここの詳しい説明に関しては、開発環境に関する知識も詳しくないといけないため、ここでは割愛します。

ただこういう可視性識別子もあるということだけ覚えておきましょう。

リンコ
リンコ

可視性識別子には説明した「public」「private」「protected」「internal」の4種類があることは覚えておくピヨ!

まとめ

まとめ

この記事では、プログラミング言語であるKotlinの可視性識別子について勉強していきましたが、いかがでしたでしょうか?今回の記事をまとめると以下のようになります。

  • 可視性識別子はコードの公開範囲を指定するもの
  • 可視性識別子には「public」「private」「protected」「internal」の4種類ある
  • 可視性識別子はクラス名や関数名の手前につける
可視性識別子 意味
何も指定しない場合 どこからでもアクセスができる
public どこからでもアクセスができる
private 同じクラス内からのみアクセスができる
protected 継承クラスからのみアクセスができる
internal モジュール内からのみアクセスできる

今回勉強した「可視性識別子」は難しくややこしいと思うので、何回も読み直してしっかり覚えておきましょう。

リンコ
リンコ

次回の記事では「スコープ関数」について勉強していくピヨ!

プログラミング未経験の方や入門レベルの方、Kotlinについて詳しくなりたい方は、また一緒に勉強するピヨ!

コメント

タイトルとURLをコピーしました