質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

2回答

6192閲覧

staticかつabstractなクラスとは何でしょうか

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

0クリップ

投稿2015/08/22 04:08

AndroidとJavaの初心者です。
Androidでのdb周りとの連携について勉強しているのですが、そこでContractクラスを定義する際に、
public static abstract class Users implements BaseColumns
というふうに、staticかつabstaractなクラスの定義をしているのを見つけました。
私の理解では
staticクラス:アウタークラスのインスタンスが生成しなくても内部のメソッドが実行可能
abstractクラス:抽象クラスでそれ自体のインスタンスを生成できず、継承にしか使えない。

だと思うのですが、2つが合わさるとどのようなクラスになるのでしょうか。

ざっくりとしたイメージとして、staticはインスタンスが生成しなくても大丈夫ーというのに対して、
abstractはインスタンスの生成を禁止!という意図で両者は結構相反する概念なのかなと考え、混乱しています。

ご回答よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

そのstaticでabstractなクラスは何かのクラスの内部クラスではないでしょうか?
だとすると,その解釈は,

  • static: 外部クラスのインスタンスが無くてもアクセスできる内部クラス
  • abstract: この内部クラス自体のインスタンスは生成できず,継承して使うべきクラス

ということになります.
例えば次のようなクラス構成になっていた場合,

java

1public class A{ 2 public static abstract class B{ 3 } 4}

Aのインスタンスを生成せずともBにアクセスできるが,これを継承しないと使えないので,

java

1public class C extends A.B{ 2}

こういう使い方になるのではないでしょうか.

投稿2015/08/22 04:26

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/08/23 03:33

早速のご回答誠にありがとうございます。 丁寧な回答のために、かなり理解が進みました。 ただ一点伺ってもよろしいでしょうか。 static: 外部クラスのインスタンスが無くてもアクセスできる内部クラス とのことですが、つまりstaticがついていない場合 public class C extends A.B{ } というふうに継承できないと考えてよろしいでしょうか。 またstaticがついていない場合、内部クラスを継承する方法について教えてもらえるとありがたいです。 よろしくお願いいたします。
swordone

2015/08/23 05:37 編集

http://www.wisdomsoft.jp/131.html staticのない内部クラスの使い方についてはここを御覧ください. 継承についてですが,staticが付いていない内部クラスについては外部クラスと関連した状態なので,外部クラスの外部から使うのは適切ではないと思われます. 上記例でいけばAクラス,またはそのサブクラスの中でBを継承してクラスを継承して使うことになるのではないでしょうか.
退会済みユーザー

退会済みユーザー

2015/08/24 03:44

ありがとうございました! よくわかりました!
guest

0

純粋なオブジェクト指向で見ると確かに違和感がありますが、Java言語のstatic classとabstract classの性質を活かしたテクニックじゃないでしょうか。ゆえに、オブジェクト指向の良し悪しから離れた方がいいと思います。

  • Usersを包含するクラスの生成毎にUsersをインスタンス化して欲しくないので、static classとして静的メンバにした。
  • Usersクラスは独立してインスタンス化するものではない(設計)だから、インタンスを生成されては困るので、abstractを付けてインスタンス化されないようにした。

投稿2015/08/23 08:03

tchofu

総合スコア87

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問