1
0

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 3 years have passed since last update.

初心者から始めるJava、抽象クラス

Posted at

#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
間違えたものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

##環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#オブジェクトを作れないクラス
今まで扱ったクラスはすべて、オブジェクト生成をしたあとのことを考えて内容を作っていた。だが、この抽象クラスそのものではオブジェクト生成・インスタンス化ができない
今回の抽象クラスは、「クラスを作ることを考えて内容を決める」必要があるクラスであり、「この抽象クラスを継承したクラスを作るとき、この機能だけはつけてくださいね」というつもりで内容を考えるとよい。

抽象クラスと、そのメソッドのうち処理内容を定義していないメソッドについて。抽象クラスは、**abstract修飾子を持ち処理内容をその場では定義しないメソッド(抽象メソッド)**を持つという特徴があり、classの前にabstractを付けることで抽象クラスとして宣言できる。

abstractClass.java
abstract class Wild
{
  protected int number;
  public void getNumber(int n)
  {
    number = n;
    System.out.println("この猫は" + number + "番目の猫です。");
  }

  abstract void show();

}

注意点として。抽象クラス内には抽象メソッドが必要だが、具象メソッド(abstractを付けていないメソッド)を実装してもよく、具象メソッドはサブクラスではそのまま継承されたメソッドとして利用できる

##抽象メソッドは必須事項を定める
抽象クラスを継承したサブクラスは、abstractのついた抽象メソッドを元に具象メソッドをオーバーライドで実装しなければならない
オーバーライドするということは、

1.シグニチャ(メソッド名。この場合引数関係は実装を待つ、と考えている)が同じ
2.アクセス修飾子が同じかより緩い
3.戻り値の型が原則同じ(共変戻り値を除く)

この条件を満たす必要があるということ。

同じ名前のメソッドがサブクラスに必須となるので、抽象クラスの内容をよく理解しないといつまでもエラーを吐き続けることになる。

HouseCat.java
class HouseCat extends Wild
{
  public void see(int num)
  {
    number = num;
    System.out.println("この猫は" + number + "番目の猫です。");
  }
  //ちょっと待った、show()はどこだ?
}

#おわりに
instanceof演算子を使うと、2項の変数が同じクラスに属しているかどうか調べることが出来る
Java SE11 Silver 問題集(通称黒本)から引用。

a instanceof b
aが、bと同じクラスかbのサブクラスのインスタンスであればtrue

main関数内で条件分岐に組み込むことが出来るので、チェック機構に向いている。

今回扱った抽象クラスによく似たものとして、次回予定のインターフェースがあるのだが、これらの違いをよく確認しておきたい。
#参考
出来るだけ自分で変数や式を書いてコンパイルしているので、完全に引用する場合はその旨記述する。

やさしいJava 第7版
Java SE11 Silver 問題集(通称黒本)

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?