【Java】クラス・メソッドの個人的まとめ(基礎)
個人的にJavaの勉強で大事だなと思ったことをまとめました。
今回は、クラス・インスタンス・メソッドについてです。
① クラスについて
- モノや事柄であるオブジェクトの1つであり、まだ実体化されていないもの(モノの設計図)。
- Javaのコードには、最低1つ以上のクラスが必要。
- クラスを1つの「モノ」として考えると、クラスの中身(メンバ)には大きく分けて以下の2つある。
- モノの状態や性質を扱う「フィールド」
- モノの機能を扱う「メソッド」
- クラスは、基本的に以下の「sample.java」ように記述する。
sample.java
// クラスの宣言
class Animal
{
// クラスのモノの状態・性質を扱う「フィールド」を記述
// 「型名 フィールド名;」のように記述
String name;
int num;
// クラスの機能を扱う「メソッド」を記述
// 「戻りの型 メソッド名(引数リスト){文;}」のように記述
void show() {
System.out.println("動物の名前は" + name + "です。");
System.out.println("登録番号は" + num + "です。");
}
}
② インスタンスについて
- モノや事柄であるオブジェクトの1つであり、実体化されたもの(設計図から作られた実物)。
- 宣言したクラスを利用するために、インスタンスの作成が必要。
- インスタンスを作成するために、以下の手順を踏む。
- インスタンス変数を宣言する。
- インスタンスを作成し、その変数で扱えるようにする。
- インスタンス作成すると、クラスのメンバにアクセスできるようになる。
sample.java
// クラスの宣言
class Animal
{
String name;
int num;
void show() {
System.out.println("動物の名前は" + name + "です。");
System.out.println("登録番号は" + num + "です。");
}
}
class Sample
{
public static void main(String[] args)
{
// インスタンス変数を宣言。
Animal animal1;
// インスタンスを作成。
// インスタンス作成で「実際に扱えるモノ」となる。
animal1 = new Animal();
// インスタンスの宣言と作成を以下のように同時に行える。
// Animal animal1 = new Animal();
// インスタンス名.フィールド名でフィールドにアクセスできる。
animal1.name = "犬";
animal1.num = "1";
// インスタンス名.メソッド名でメソッドにアクセスできる。
animal1.show();
}
}
console
動物の名前は犬です。
登録番号は1です。
③ メソッドについて
- メソッドは、モノの機能を扱う(処理をする)部分である。
- クラス外からメソッドを呼ぶときは、「インスタンス名.メソッド名」とする。
- クラス内でメソッドを呼ぶときは、「メソッド名」または「this.メソッド名」とする。
sample.java
// クラスの宣言
class Animal {
String name;
int num;
void show() {
System.out.println("動物の名前は" + name + "です。");
System.out.println("登録番号は" + num + "です。");
}
void showAnimal() {
System.out.println("動物を紹介していきます。");
// 自分自身のメソッドを呼び出している(クラス内から呼び出している)。
// show()としても良い。
this.show();
}
}
class Sample {
public static void main(String[] args) {
Animal animal1;
animal1 = new Animal();
animal1.name = "犬";
animal1.num = "1";
// animal1の情報でメソッドを呼び出している(クラス外から呼び出している)。
animal1.showAnimal();
}
}
console
動物を紹介していきます。
動物の名前は犬です。
登録番号は1です。
④ メソッドの引数と戻り値
-
メソッドには、引数(値)を渡すことができる。
-
引数には、以下の2種類がある。
(1) メソッドの定義内で値を受け取る変数 => 仮引数
(2) メソッドを呼び出すときに渡す値 => 実引数 -
メソッドの呼び出し元に、メソッド本体から戻り値(情報)を渡すことができる。
-
戻り値のないメソッドでは、void型を利用する。
-
戻り値には、利用法が以下の2種類がある。
(1) 呼び出し元で、戻り値利用する場合
戻りの型 変数名 = オブジェクト名.メソッド名(引数リスト);
(2) 呼び出し元で、戻り値利用しない場合
オブジェクト名.メソッド名(引数リスト);
sample.java
// クラスの宣言
class Animal {
String name;
int num;
// String型およびint型の仮引数を用意。
// 戻り値のないメソッド。
void show(String str, int n) {
// 引数の値をメソッド内で利用できるようにしておく。
name = str;
num = n;
System.out.println("動物の名前は" + str + "です。");
System.out.println("登録番号は" + n + "です。");
}
// 戻り値がString型のメソッド。
String getAnimal() {
System.out.println("動物を紹介していきます。");
// 呼び出し元に、戻り値を渡す。
return name;
}
}
class Sample {
public static void main(String[] args) {
Animal animal1 = new Animal();
String name = "トラ";
// animal1の情報でメソッドに実引数を渡す(変数も利用可能)。
// 呼び出し元で、戻り値を利用しないパターン。
animal1.show(name, 2);
// 呼び出し元で、戻り値を利用するパターン。
int number = animal1.getAnimal();
// 戻り値を利用する。
System.out.println(name + "の登録番号は、" + number + "です。");
}
}
console
動物の名前はトラです。
登録番号は2です。
動物を紹介していきます。
トラの登録番号は、2です。
⑤ メンバへのアクセス制限
- メンバには、アクセス制限を設けることができる。
- 「private」メンバには、クラス外からアクセスできない。
- 「public」メンバには、クラス外からアクセスできる。
⑥ カプセル化
- クラスの中に、データ(フィールド)と機能(メソッド)をひとまとめにし、保護したいメンバには「private」を付けることで、アクセス制限を設ける機能のこと。
sample.java
class クラス名 {
// クラス外からアクセス不可能。
private 型名 フィールド名;
// クラス外からアクセス可能。
public void メソッド名 {
式;
}
}
⑦ メソッドのオーバーロード
- 同じクラス内に、同じメソッド名で、異なる引数の型・個数を持つメソッドを定義すること。
- 戻り値の型の違いのみでオーバーロードしてしまうと、プログラムがどちらにアクセスすればよいか分からな くなってしまう。そのため、オーバーロードする際は、必ず「異なる引数の型・個数を持つ」ようにする。
sample.java
class Animal {
String name;
int num;
// 引数が1つのメソッド。
void show(String str) {
name = str;
System.out.println("動物の名前は" + str + "です。");
}
// 引数が2つのメソッド。
void show(String str, int n) {
name = str;
num = n;
System.out.println("動物の名前は" + str + "です。");
System.out.println("登録番号は" + n + "です。");
}
}
class Sample {
public static void main(String[] args) {
Animal animal1 = new Animal();
String name = "トラ";
int num = 2;
// 引数が1つのメソッドを呼び出す。
animal1.show(name);
// 引数が2つのメソッドを呼び出す。
animal1.show(name, num);
}
}
console
動物の名前はトラです。
動物の名前はトラです。
登録番号は2です。
以上。