Java学習のためPHPのクラス周りの仕様を比較してみる。
抽象クラス、抽象メソッド
phpとたぶん同じ。
- 抽象クラスと抽象メソッドの定義には abstract 修飾子をつかう
- 抽象クラス中に 非抽象クラスを含めることができる
- 抽象クラスのインスタンスは生成できない
- 抽象クラスの 非抽象staticメンバ はコール可能
インターフェイス
phpとだいたい同じだけど細かい部分は異なる。
- メンバにpublicしか使えないのはphpと同様。インターフェイスの概念上public以外使えるのはおかしい。
- 多重継承・多重実装が可能で抽象メソッドが被っても問題ない
- インターフェイスはインターフェイスを継承できる。親をスーパーインターフェイス、子をサブインターフェイスという。
- Javaでは public final (static) フィールドの定義ができる。public と final は省略できる。phpではプロパティは定義できないけど、クラス定数をconstで宣言することは可能
- フィールドに使用できる修飾子は public, static, final の3種類で、組み合わせは自由
- phpではabstract修飾子は省略必須だけど、Javaでは省略してもしなくてもOK
可視性
PHPとかなり使い方が違う。
クラスメンバの可視性
package-private (指定なし) |
|
public |
|
protected |
|
private |
|
クラスの可視性/修飾子
package-private (指定なし) |
|
public |
|
final |
|
phpではクラスに可視性を設定できない、常にpublic扱い。
Java と php の用語比較メモ
Java | php |
---|---|
メンバ | 同じ |
フィールド | プロパティ。Javaにおけるプロパティは別物っぽい?まだよくわからない。 |
メソッド | 同じ |
オーバーロード | phpにはJavaでいうオーバーロードは存在しない |
コンストラクタ | phpでは \_\_constructor も使える |
デフォルトコンストラクタ | 存在しない機能 |
final (フィールド) | プロパティに対してfinal修飾子は使えない |
static final (フィールド) | const クラス定数 |
abstract | 同じ |
finally | 存在しない機能 |
throws | 存在しない |
. (ドット) | -> or :: |
extends implements | 細かい違いはあるが だいたい同じ |
super() | parent:: |