Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java

Javaのabstractとは?抽象クラスの概要やサンプルPGをご紹介

投稿日:2020年10月12日 更新日:

<目次>

(1) Javaのabstractとは?抽象クラスの概要やサンプルPGをご紹介
 (1-1) 抽象クラス(abstract)とは
 (1-2) 抽象クラスの目的や用途
 (1-3) 抽象クラスの構文
 (1-4) 抽象クラスとインターフェイスとの違いは?
 (1-5) 抽象クラスのサンプルプログラム
 (1-6) 備考:abstractメソッドの制約

(1) Javaのabstractとは?抽象クラスの概要やサンプルPGをご紹介

(1-1) 抽象クラス(abstract)とは

実装が無いメソッドを持ち、オブジェクトを生成出来ない (インスタンス化できない)クラスの事を「抽象クラス」と呼びます。
抽象クラスはスーパークラス(継承される側のクラス)として利用される事が多く、全てのabstractメソッド(抽象メソッド)を実装したらインスタンス化が可能になります。
 

(1-2) 抽象クラスの目的や用途

・複数のサブクラスから継承できる共通的な振る舞い(メソッド等)を定義するために使われます。
・その際に抽象クラスは実装されたメソッドを持つことが出来るので、継承する側は一部のみを実装するだけで済みます。
 

(1-3) 抽象クラスの構文

以下は抽象クラスの構文です。
抽象クラス内の実装の無いメソッドを「抽象メソッド」と呼んでいます。
public abstract class [クラス名]  {
	//中略
	public abstract [戻り値の型] [メソッド名](引数を列挙);
	//中略
}
 

(1-4) 抽象クラスとインターフェイスとの違いは?

(違い①)
実装されたメソッドを持つことが出来る(インターフェイスはメソッドのシグニチャ(=外部仕様=メソッド名、引数、戻り値の型、例外の型)のみ)

(違い②)
定数以外の変数を定義する事が出来る(インターフェイスは定数のみ定義可能=暗黙的にfinalになる)
 

(1-5) 抽象クラスのサンプルプログラム

抽象クラスを用いたサンプルプログラムです。抽象クラス「Fruits」を3つのサブクラス「Strawberry」(苺)、「Grape」(ぶどう)、「Banana」(バナナ)クラスがそれぞれ実装しております。
mainメソッドの中では、フルーツの原産地を引数にインスタンスを作り、それぞれのサブクラスの「color()」メソッドでメッセージを出力しています。

public class AbstractTest {
        public static void main(String args[]) {
                Fruits obj[] = {new Strawberry("栃木"), new Grape("山梨"), new Banana("インドネシア")};
                for(Fruits o: obj) {
                        o.color();
                }
        }
}
abstract class Fruits {
        public abstract void color();
}
class Strawberry extends Fruits {
        private String origin;
        public Strawberry(String origin) {
                this.origin = origin;
        }
        public void color() {
                System.out.println("「"+origin+"」産のイチゴは赤くて美味しいです");
        }
}
class Grape extends Fruits {
        private String origin;
        public Grape(String origin) {
                this.origin = origin;
        }
        public void color() {
                System.out.println("「"+origin+"」産のブドウは紫色で美味しいです");
        }
}
class Banana extends Fruits {
        private String origin;
        public Banana(String origin) {
                this.origin = origin;
        }
        public void color() {
                System.out.println("「"+origin+"」産のバナナは黄色で美味しいです");
        }
}

(図151)プログラム実行例

目次にもどる

(1-6) 備考:abstractメソッドの制約

(ルール①)
staticメソッドをabstractメソッドとして定義できない(→staticはインスタンス化せずとも共有されてしまい、抽象メソッドを全て実装したらインスタンス化できる、という抽象クラスのルールと相反するから?)

(ルール②)
privateなメソッドをabstractメソッドとして定義できない(→これは何となく納得ですね。abstractメソッドを実装する場合はクラス外でも使うので、相反する事が理解できます)
 

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

オープンアドレス法のアルゴリズムについて図を使ってご紹介

<目次> (1) オープンアドレス法のアルゴリズムについて図を使ってご紹介  (1-1) オープンアドレス法とは?  (1-2) オープンアドレス法のアルゴリズム  (1-3) オープンアドレス法の利 …

JavaのSpring Bootを使ってHello Worldのアプリケーションを作成する

  <目次> (1) JavaのSpring Bootを使ってHello Worldのアプリケーションを作成する  (1-1) はじめに(Spring Bootとは?)  (1-2) Spr …

Javaの選択ソートとは?アルゴリズムの流れ+サンプルプログラムをご紹介

<目次> (1) バイナリ―サーチとは?Javaのサンプルプログラムを用いて解説  (1-1) バイナリ―サーチのアルゴリズム  (1-2) バイナリ―サーチの性能(処理回数)  (1-3) バイナリ …

「Graphics Device initialization failed for : es2, sw」エラーの原因と対処方法(Java FX関連)

  <目次> (1) 「Graphics Device initialization failed for : es2, sw」エラーの原因と対処方法(Java FX関連)  (1-1) エ …

JavaのhashCode()で31を掛け算する理由について

<目次> (1) JavaのhashCode()で31を掛け算する理由について  (1-1) ハッシュの計算のソースコード  (1-2) ソースコードに登場する代表的な変数  (1-3) ソースコード …

  • English (United States)
  • 日本語
Top