#プログラミング勉強日記
2020年11月25日
インターフェイスを継承してクラスを定義するときに必要なimplementsについてまとめる。
#implementsとは
implementsの説明をする前にインターフェイスの説明を簡単にする。インターフェイスは、メソッドの戻り値とメソッド名、引数といった使用のみを定義したもので、実際の処理を持たないクラスのようなものである。intefaceを使って型宣言を行うことはできるが、メソッドの定義がないとプログラムは実行できないので、そこでimplementsを使う。つまり、インターフェイスに定義されているメソッドを定義しているクラスであると指定する。
仕様を言い換えると約束事で、約束通りの使い方をすると約束通りの結果になるということをあらかじめ決めておくことで、そのメソッドを使う側は実際の作りを気にしなくてよく、そのメソッドを作る側は仕様さえ守ればいつでも好きなように実装を変えることができる。
#implementsの書き方
あるクラスにインターフェイスを実装するには下記のように、クラス名の後ろにimplementsを書き、さらにその後ろにインターフェイス名を書く。インターフェイスに抽象メソッドが定義されているならクラスではその抽象メソッドの内容を実際に作る抽象メソッドの実装をしないといけない。(実装しないと、コンパイルエラーになる。)
抽象クラスにインターフェイスを実装する場合は、インターフェイスの抽象メソッドの実装は必要ない。
class クラス名 implements インターフェイス名 {
}
// 抽象メソッドが定義されている場合
class クラス名 implements インターフェイス名 {
インターフェイスの抽象メソッド() {
抽象メソッドの実装;
}
}
インターフェイスを複数implementsすることもでき、その場合はimplementsの後ろに実装したいインターフェイスを,
(カンマ)で続ける。この場合は、クラスで実装したいインターフェイスにあるすべての抽象メソッドを作成しないといけない。
class クラス名 implements インターフェイス名1, インターフェイス名2, ... {
インターフェイス1の抽象メソッド() {
抽象メソッドの実装;
}
インターフェイス2の抽象メソッド() {
抽象メソッドの実装;
}
}
#サンプルコード
ボタンをクリックするごとにボタンのテキストの表示が変わるプログラムを作成した。
アクションやイベントの処理に関連するクラスでは、ActionListenerというインターフェイスを実装する。そうしたクラスによって作成されたオブジェクトは、アクションやイベントが発生するとコンポーネントのaddActionListenerメソッドが呼び出される。
package Sample;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Sample extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
private JLabel L1;
private JButton b1;
public Sample() {
setLayout(null);
this.setSize(200, 200);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
L1 = new JLabel("テスト用ボタン");
b1 = new JButton("Click me");
L1.setBounds(50, 10, 100, 20);
b1.setBounds(new Rectangle(50, 80, 90, 30));
b1.addActionListener(this);
this.add(L1);
this.add(b1);
this.setVisible(true);
}
public void actionPerformed(ActionEvent ev) {
if(b1.getText() == "ON")
b1.setText("OFF");
else
b1.setText("ON");
System.out.println("you clicked");
}
public static void main(String[] args) {
new Sample();
}
}
#参考文献
よくわかる! Javaのインターフェイスを実装する”implements”
インターフェースを実装!Javaでimplementsを使う方法【初心者向け】