5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アクセス修飾子まとめ~スマホアプリ開発編(Java/Kotlin/Objective-C/Swift/C#/F#)

Last updated at Posted at 2017-08-04

はじめに

いろんな言語をまたがって開発しているときに混乱するポイントとして、アクセス修飾子があります。
今回はスマホアプリ開発編として、Android開発で用いられるJava/Kotlin、iOS開発で用いられるObjective-C/Swift、そしてXamarinで使われるC#/F#について、それぞれのアクセス修飾子について調べて、比較表としてまとめてみました。
※Java/C#以外はほとんど経験がないので、間違いがありましたらご指摘いただけますと幸いです

比較表

アクセス修飾子 Java Kotlin Objective-C Swift C# F#
open (存在しない) (存在しない) (存在しない) どこからでもアクセス可能
※Swift3で追加
(存在しない) (存在しない)
public どこからでもアクセス可能 どこからでもアクセス可能 どこからでもアクセス可能 どこからでもアクセス可能
※ただし別モジュールからの継承とオーバーライドは不可(Swift2まではどこからでもアクセス可能)
どこからでもアクセスが可能 どこからでもアクセスが可能
package (存在しない) (存在しない) 同一フレームワーク内からアクセス可能
※フレームワーク外ではprivate
(存在しない) (存在しない) (存在しない)
protected 同一パッケージ内のクラス+派生クラスからアクセス可能 継承した同一パッケージ内のクラス+派生クラスからアクセス可能 同一クラス+派生クラスからアクセス可能 (存在しない) 同一クラス+派生クラスからアクセスが可能 (存在しない)
protected internal (存在しない) (存在しない) (存在しない) (存在しない) 同一プロジェクト内のクラス+派生クラスからアクセス可能 (存在しない)
internal (存在しない) 同一モジュール内でアクセス可能 (存在しない) 同一モジュール内でアクセス可能 同一アセンブリ内でアクセス可能 同一アセンブリ内でアクセス可能
fileprivate (存在しない) (存在しない) (存在しない) 同一ファイル内でアクセス可能
※Swift3で追加
(存在しない) (存在しない)
private 同一スコープ内でアクセス可能
※内部クラスのprivate変数も参照可
同一スコープ内でアクセス可能 同一スコープ内でアクセス可能 同一スコープ内でアクセス可能
※Swift2までは同一ファイル内でアクセス可能
同一スコープ内でアクセス可能 同一スコープ内でアクセス可能
指定しない 同一パッケージ内でアクセス可能 publicと同じ protectedと同じ internalと同じ privateと同じ publicと同じ
※let束縛/do束縛ではprivateと同じ

何も指定しなかったときの動きがそれぞれ見事に異なるので、注意が必要そうです。

参考

はじめてのKotlin。Javaと比較してみた
Swift 3からのアクセスコントロール
Objective-C アクセス指定子

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?