for文のネスト
2つ目のfor文はfalseになるまで実行される
class Main {
public static void main(String[] args) {
int[] array1 = {1, 2, 3};
int[] array2 = {4, 5};
for (int x = 0; x < array1.length; x++) {
System.out.print(array1[x] + " ");
for (int y = 0; x < array2.length; y++) {
System.out.print(array2[y] + " ");
}
}
}
}
実行結果
145245345
オーバーライド
・サブクラスでオーバーライドするには
メソッド名、引数リストが同じであること
戻り値は同じか戻り値の型がサブクラスであればOK
アクセス修飾子はスーパークラスと同じかそれよりも公開範囲が広いもの
スーパークラスのクラス、メソッドにfinalが付いている場合はオーバーライドできない
アクセス修飾子 戻り値の型 メソッド名(引数リスト) { }
this
自分自身のオブジェクトを指す
オブジェクトが保持する変数、メソッド、コンストラクタを明示的にしていする際に使う
this.変数名
thisでコンストラクタを呼ぶ
class Main {
String s;
int i;
public Main() {
this("hello");
}
public Main(String s) {
this("hello", 3);
}
public Main(String s, int i) {
this.s = s; this.i = i;
System.out.println(this.s + this.i);
}
}
super
サブクラスから明示的にスーパークラスを呼び出すときに使う
super.メソッド名
superでコンストラクタを呼び出す
サブクラスをインスタンス化するとまずスーパークラスのコンストラクタが実行される
抽象クラス
[修飾子] abstract class クラス名 { }
・特徴
インスタンス化はできない
サブクラスでオーバーライドして利用
・抽象クラスをもとにサブクラスを定義するときはextendsキーワードを使う
抽象メソッド
[修飾子] abstract 戻り値の型 メソッド名(引数リスト);
- 特徴
修飾子、戻り値の型、メソッド名、引数リストには通常のメソッドと同様に記述する
処理はもたないためメソッドの後ろに「;」(セミコロン)で終わる
継承したクラスは必ず抽象メソッドを実装しなくてはいけない
インターフェイス
[修飾子] interface インタフェイス名 { }
-
特徴
変数は定数しか定義できない
メソッドは抽象メソッドしか宣言できない
インスタンス化はできず使用する場合は実装クラスを定義する
実装クラス側では抽象メソッドをすべてオーバーライドする
実装クラスを定義するにはimplementsキーワードを使う
インターフェイスをもとにサブインターフェイスを宣言する場合はextendsキーワードを使う -
インターフェイスでの変数とメソッド
インターフェイス内で変数を定義すると暗黙的にpublic static final 修飾子が付与される
staticな変数で変数の宣言と同時に初期化しなければコンパイルエラーとなる
アクセス修飾子はpublicのみです。 -
インターフェイスの実装クラス
[修飾子] class クラス名 implements インターフェイス名 { }
implementsで指定したインターフェイスのメソッドをオーバーライドしなくてはいけない
またオーバーライドする際にはpublic修飾子をつける必要がある
パッケージ化
package パッケージ名;
class Main { }
-
特徴
ソースファイルの先頭にpackageキーワードを使う
コメントなどの下に記述でもOK -
異なるパッケージに所属するクラスを利用する
import文をソースファイルの先頭行で記述する
◆ひとつのクラスを利用する場合
import パッケージ名.クラス名;
◆複数のクラスを利用する場合
import パッケージ名 *;