Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ぐちこ

Java初心者で、ただいま必死に勉強中です。

わからないことは、
「オブジェクト変数」って、オブジェクトを作成する以外に何に使うの?
ということです。

だいたいは、オブジェクト変数はオブジェクトを作成するのに使われるだろうし、私もそう認識してました。

なぜこんな疑問が沸いたかというと、ただいまインターフェースのところを勉強中なのですが、インターフェースは、classのようにオブジェクトを作成できない。
ただし、変数は宣言できる。とテキストに書いてあったのです。
オブジェクトを作成できないなら、ただのオブジェクト変数って何に使うの?という疑問符がわいてしまいました。
インターフェースから作るオブジェクト変数の用途はここのサイトに書いてありましたが、インターフェースだけじゃなくて、クラスから作るオブジェクト変数はオブジェクト作成以外にどう使われるのか。。

頭が混乱しています。
そもそも基本的なことが分かっていないのかもしれませんが。。
どなたか、お知恵を貸していただけますでしょうか。
お願いします。

6

回答

83006

閲覧

6件の回答

評価

0

Gutikoがインタフェイスなら

Gutiko g;

という変数は、Gutikoの実装クラスのオブジェクト(の参照)となります。

クラスはなんでもいいので、このことを、ポリモーフィズム(多態性)と呼びます。いろんな形のGutikoがあるよ、という意味ですね。

実際にアプリケーションを作るようになると、ポリモーフィズムのありがたみを実感できます。

評価

0

んー…?

String name = hoge.getName();

例えばこんなやつ。
このnameがいわゆるオブジェクト変数なわけですが、ここでインスタンスを生成はしてないですよ?
getName()メソッド内で生成したり、hogeのどこかで生成してたり、またはhogeのコンストラクタで渡されたインスタンスだったりするでしょう。
生成してない(==null)かも知れません。

「インターフェースから作る」なんて言い方をしている時点で、どうも概念的なものが分かっていないように見えますが。

宣言はあくまで、その変数をその後どういう形で扱うかを示しているだけで、実際に変数に何が入るかはそこでは示されないです。

評価

0

質問は、
?オブジェクト変数って、なに?
?インターフェースに変数つけられるけれど、利用用途は?
ですね。
?Javaの主要な要素はクラスとオブジェクトです。
クラスとは、抽象観念です。
例えば、「人間」のことです。具体的には「人間」というのは、この世に存在しません。人型の生きているものを総称して、呼びやすいように「人間」と言う観念を作り出しているものです。
対してオブジェクトとは、具体的なものです。例えば「ぐちこさん」です。具体的に存在します。

クラスにもオブジェクトにも、変数は存在します。
クラスの変数はstaticとして宣言します。人間が定常的にもつ特徴を保持します。例えば遺伝子が48対(だっけ?)だとかです。
オブジェクトの変数は「ぐちこさん」が持つ特徴を宣言します。年齢、血液型とかです。

で、?インターフェースの変数の利用用途ですが、インターフェースから解説します。
まず、「インターフェースはオブジェクト化できない」の正確な理解から行いましょう。
例えば、電池の世界で言うと、
単三型電池=インターフェース=クラスが守るルール
単三型アルカリ電池=クラス
単三型マンガン電池=クラス
ある一つの、例えばぐちこさんが右手で持っている電池=オブジェクト
です。
単三型電池と言うルールで、大きさとか、形が決まっています。決まっているからこそ、単三型電池であれば、マンガン電池でも、アルカリ電池でも、リモコンにはめ込むことが出来ます。

インターフェースはルールなので、実際に利用するときは必ずそのルールを守っているクラスと、そのクラスからnewしたオブジェクトが存在します。

つまりインターフェースについている変数も、そのインターフェースをimplementsするオブジェクトによって、またそのオブジェクトを利用するクラスから利用されます。

・・・つたわりましたかね???

評価

0

皆さん、すばやい反応ありがとうございます!

ななしさん、とても丁寧な解説ありがとうございます!
ななしさんがおっしゃっている「インターフェースについている変数」とは、インターフェース内に定義されているメンバ変数のことですよね?
それはわかるのですが、インターフェース内ではなくクラス側で生成するインターフェースのオブジェクト変数の使い道がわからないんです。。
たとえば、インターフェースがABCだったら、
ABC abc; 
というふうに定義して、オブジェクト変数を作りますよね。
この、abcはどういうふうに使われるのかがわからなかったのです。


なんだか、自分でもこんがらがってきました。。
皆さんのレスを読ませていただいて、$さんのいうとおり、概念が理解できていないと感じました。
もう一度、1から勉強しなおしてみます。
クラスの種類やメソッドの使い分けとかではなく、最初の基本のところ(クラスとは何か、オブジェクトとは何か)から理解していこうと思います。

評価

0

たとえば、

動物 a;

a.食べる();

みたいなのはどうですかね。
この対象は、「日本人」であったり「柴犬」であったり「プランクトン」であったりします。
ここでは「食べる」という抽象的な動作を指定するために、インターフェース「動物」を用いています。
インターフェース自体がどのように使われるのかを、勉強するとよいかもですね。

評価

0

オブジェクト指向の基本的な部分ですが、java が最初の言語なんだったら、「オブジェクトの変数」なんかの有用性は難しいかも・・・
C の ポインタなんかが理解できていれば、わりと受け入れやすい考え方なんですけどね。

デザインパターンなんかの本を読んでみるのも良いかもしれません(チョット難しい?)

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。