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

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

関連記事

サーバサイドJava(JSP&サーブレット)における画面遷移の手法とそのサンプルコードの紹介

(0)目次&概説 (1) 画面遷移の代表手法  (1-1) フォワード  (1-2) リダイレクト (2) 画面遷移手法のご紹介  (2-1) 方法1:formタグ+Submitボタン(JSP/Ser …

JavaScriptでformをPOSTリクエストでsubmitするプログラムの例

  <目次> (1) JavaScriptでformをPOSTリクエストでsubmitするプログラムの例  (1-1) 概要  (1-2) 構文  (1-3) サンプルプログラム  (1-4 …

Tomcatの起動時のエラー「アドレスは既に使用中です」や「必要な幾つかのポートがすでに使用中です」の対処方法

<目次> (1) Tomcatの起動時のエラー「アドレスは既に使用中です」や「必要な幾つかのポートがすでに使用中です」の対処方法  (1-1) 発生状況  (1-2) 原因  (1-3) 対処方法 ( …

Javaの動的Webプロジェクト作成での事前設定と雛形Webプロジェクト作成

「動的Webプロジェクト」とはHTMLのような静的ページのみならず、ServletやJSPを用いてWebアプリケーション開発をする際に作成します。本記事ではEclipseにて「動的Webプロジェクト」 …

JavaのMapの種類や特徴について(HashMap/LinkedHashMap/TreeMap)

<目次> (1) JavaのMapの種類や特徴について(HashMap/LinkedHashMap/TreeMap)  (1-1) Mapとは?  (1-2) Mapの種類や特徴   (1-2-1) …

  • English (United States)
  • 日本語
Top