• ベストアンサー

初歩的な質問です・・・

最近javaの本を買って勉強しているのですが、最初で躓き、理解できないことろがたくさんあります。 ・インスタンスを作る ・コンストラクタを定義する ・メソッド ・引数 ・voidの使い方(public void ,void ~~ そもそもvoid自体の意味が・・・) ・クラスの継承 APIというのを見てもプログラミング初心者の私には説明が難しくて理解できません・・・。 なにかに例えて教えていただければうれしいです(^^) よろしくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

あんまり気にしなくてもいいと思うんですが。。。実際に長いプログラムを打てるようになってきてから自然に理解できる。。。と思う。 ・インスタンスを作る インスタンス作成前・・・修理工場の中にある車 インスタンス作成後・・・修理してもらった車 ・コンストラクタを定義する ボタンクラスのコンストラクタは button("なんとか"); フレームクラスのコンストラクタは frame("なんとか"); 両方とも 「なんとか」 の部分には、表示、とか OKとかが入る。 フレームクラスの 「なんとか」 には、マイコンピュータとか今使っているフレームの題名が入ります。 よって、コンストラクタとは初期設定もろもろのことです。 ・メソッド これは、機能。たとえば 画面に文字を表示するとか、ボタンのサイズを決めるとか、こっちとあっちの処理を交換するとかです。 ・引数 ・voidの使い方 上記のメソッドに預ける情報です。身近に言えば銀行のATMで1万円振り込むときの1万円です。ATMのコンピュータは1万円という引数を口座に+します。同様に,ABCDという預金のメソッドがあるとします。 このメソッドは引数として1万円もらいます。これをJavaでかくと。。。 ABCD(10000){ 新しい預金 = 古い預金 + 10000; } となります。上の例では10000円という情報をあげてますね。これが引数です。これとは逆に戻り値というのがあり、元のメソッドにABCDで得られた 新しい預金を返します。古い預金が5000円だと、新しい預金は15000円ですね。これが戻り値です。ATMでお客様に対して新しい預金残高を表示しなければいけない時、ABCDで得られた15000円という情報が必要です。だから15000を元のメソッドに返してもらわなければいけません。上のABCD(10000)は正式には int ABCD(10000)です。intは戻り値の型 10000は整数なのでintになります。void ってのは情報がない時です。 void display(10)というメソッドは画面に10を表示して処理が終了するメソッドです。元のメソッドには情報を返す必要がありません。そういう時はvoid。整数を返すときはint。 ・クラスの継承 クラスにある機能では足らない。そういう時継承します。例えば、ボタンの機能を拡張したい。ボタンを押すともう1つボタンが出るようにしたい。そういう時はプログラムにその昨日を書き足すことでその機能が実現するようになります。そんな馬鹿な機能はいりませんが、普通のボタンにはそんな機能はついてませんよね。

参考URL:
http://www.horae.dti.ne.jp/~yoji/
saya129
質問者

お礼

とーーってもわかりやすい説明ありがとうございます!! 本に書いてある説明ってどうしてわかりにくいんですかね?(笑) ほんとかなり理解できました! kamkamkam3さんが本出した方がいいですよσ(^^) ありがとうございました(^^)

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • misoka
  • ベストアンサー率35% (56/160)
回答No.2

> ・インスタンスを作る > ・コンストラクタを定義する > ・メソッド > ・クラスの継承 というのは、「オブジェクト指向」の用語でもあります。 まずは、じっくりと「オブジェクト指向」とは何か、から始めてみる というのも、よいかもしれません。 もっとも、オブジェクト指向という考え方は、世間一般では、理解しづらい ものとされているようなので、始めから完全理解は目指さないほうがよい かもしれません(^^; 参考URLは、オブジェクト指向の解説ページです。 分かりやすいほうだと思いますが、それは、プログラミング経験にも よることなので、何ともいえない部分はあります。 まずは、クラスとインスタンスの関係がどうなっているのか、に 注目してみるとよいでしょう。 頑張って下さい。

参考URL:
http://www.wakhok.ac.jp/~tatsuo/JavaWorld/
saya129
質問者

お礼

たしかにオブジェクト指向自体よくわかりません・・。 でも一つ一つ解決していきたいと思います。 参考のサイト、とてもいい感じです! どうもありがとうございました!(^^)

全文を見る
すると、全ての回答が全文表示されます。
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

わかるところだけ。 インスタンスを作る…クラスは設計図または鋳型と考えてください。インスタンスは設計図または鋳型から作られた製品です。インスタンスは設計図から製造された自動車と考えてください。 メソッド…「ふるまい」といいます。オブジェクトの持つ「動詞機能」です。 うたう。泣く。踊る。笑う。勉強する。死ぬ。全てメソッドです。 引数…専門家である関数(一般的にはサブルーチン)に仕事を頼むときに伝える条件データのことです。洋服を作ってもらうには採寸した寸法を仕立て屋に伝えます。 void…無効、無意味、無いと言う意味です。関数などで引数なし、戻り値なしなどのときに宣言します。 クラスの継承…上のクラス(スーパクラス)の性質やメソッドは下のクラス(サブクラス)に原則的に引き継がれるという考え方です。

saya129
質問者

お礼

即行の回答ありがとうございます! やっぱりなにかに例えて説明してもらうとわかりやすいですねσ(^^) とてもわかりやすかったです! どうもありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  •  superについて教えて下さい

     superについて教えて下さい  JAVAの初心者です、宜しくお願いします。  「super」についてよくわかりません。 ある本には、「親クラスのコンストラクタを呼び出す」、またある本には、「親クラスのオブジェクトを呼 び出す」、と書かれていました。  ・コンストラクタとオブジェクトとは同じ意味なのでしょうか。  ・また、ある本には、「コンストラクタの継承はされない」とかかれていますが、どのように違うのでしょうか。  ・JAVAのApIには、次のように書かれています。   「paint     public void paint(Graphics g)コンテナをペイントします。このコンテナの子コンポーネントで    あるすべての軽量コンポーネントへペイント要求を転送します。このメソッドが再実装される場合、軽量    コンポーネントが正しく描画されるように super.paint(g) を呼び出さなければなりません。    (以下略)」   super.paint(g)と各意味は、親クラスのメソッドを呼びだすことで、親クラスのメソッドを呼びだす時に  も、superが必要ということでしょうか。  コンストラクタ自体についてよく理解出来ていないのですが  ・そもそもクラス(オブジェクトの生成)にとってどのような役割、意味があるのでしょうか。   オブジェクトの生成すると、デフォルトで自動的に引数なしのコンストラクタが作成されると書かれています  が、  ・作成されること自体にどのような意味があるのでしょうか。  変数の初期化とかをコンストラクタ内で設定するのは意味があるとは思うのですが、、、、

    • ベストアンサー
    • Java
  • 親クラスのコンストラクタは? 引数付きコンストラクタは?

    VisualBasic.NETです。 あるクラスを継承したクラスからインスタンスを作成したときに、派生クラスのコンストラクタは呼び出されると思うのですが、基本クラスのコンストラクタはどうなるのでしょうか? JAVAのように、super() で呼び出す必要があるのでしょうか? 自動で呼び出されるのでしょうか? それとも、そもそも呼び出せないのでしょうか? また、引数の個数が違うコンストラクタは、同じクラス内に設定できるのでしょうか? JAVAのコードを移植しようと考えているのですが、出来るのかどうかが分からずに悩んでいます。 ご存じの方、よろしくお願いします。

  • super( )メソッドについて質問です

    サブクラスのコンストラクタの定義をするときにsuper()メソッドを使うときはどういうときですか?また、どうしてsuper()メソッドを使って、スーパークラスのインスタンスを作成しないといけないのですか?教えてください。

    • ベストアンサー
    • Java
  • 【.NET】コンストラクタをあとで呼出す方法

    .NET初心者です。 今VB.NETでVB6向けの自作COMクラスライブラリを作成しています。 自作クラスはStreamWriterクラスのラッパークラスとしてStreamWriterと継承関係にあります。 COMは引数なしのコンストラクターを一つ用意しなければなりませんが、 StreamWriterクラスは引数なしのコンストラクタを用意されていないため困っています。 自作クラス自身もFileクラスのラッパークラスで引数として使う必要があるため 継承関係を維持してVB6に公開する必要があります。 この問題をなんとか解決する手法って存在するのでしょうか? ちなみにほかに考えた手法は下記です。 ・プロパティーに StreamWriterのインスタンスを用いて継承関係なしであとでinitメソッドを呼び出す   →Fileラッパークラスの引数でStreamWriter型に代入出来ないため不可 ・StreamWriterを引数に取るメソッドの実装をあきらめる   →極力したくない ・StreamWriterラッパークラスの引数なしコンストラクタでStreamWriterクラスの引数ありコンストラクタを呼ぶ   →後でファイルのパスを指定する方法が見つからないため不可 他言語はそれなりにやってきたのでコンストラクターをあとで呼び出すなんて出来ないのはなんとなくわかるのですが何せ.NETを触り始めたのが最近なのでよろしくお願い致します。

  • Javaのstaticメソッドの意味を教えて下さい

    Javaのstaticメソッドの意味を教えて下さい。 現在の解釈では、staticなメソッドとはインスタンスの生成に依存せず呼び出せる処理のことだと認識しています。逆にstaticでないメソッドは、生成後のインスタンスにしか使えない処理だと理解しています。 しかし、コンストラクタがstaticでないことに気がつき、疑問が生まれました。コンストラクタはstaticではないので、コンストラクタを呼び出す時にはそのクラスのインスタンスが必要になるはずです。しかしこのインスタンスを作るのにもコンストラクタが必要です。コンストラクタを使うためにインスタンスが必要で、インスタンスを作るためにコンストラクタが必要という無限ループになってしまいました。 そこで改めて、staticメソッドの意味を教えて頂きたいです。

  • SQLiteOpenHelperの実行タイミングは

    android(Java) ・「SQLiteOpenHelperクラス」を継承したユーザー定義クラスの、「コンストラクタ」や「onCreateメソッド」はどのタイミングで(どういう経路で)呼び出されるのでしょうか? >データベースの作成がまだ行われていなければ作成を行い、作成されていればそれを開きます ・どうやってそれを知るのでしょうか? ・アクテイビティにアクセスした時点で読み込まれるのかと思ったのですが、アクティビティクラスでは、importしていないみたいだし… ・アクテイビティは関係ない? ・「SQLiteOpenHelperクラス」を継承した定義クラスが、どのタイミングで、どこから呼び出されるか、教えてください ※コンストラクタに引数として渡っているContextが、何か関係しているのでしょうか?

    • ベストアンサー
    • Java
  • C++変数宣言時のコンストラクタについて

    Java開発をこれまでやってきたのですが、 C++を学ぼうとしています。 C++では下記のように宣言した場合hogeは インスタンスになり、Hogeクラスのコンストラクタが呼ばれるようなのですが、 Hoge hoge; Hogeクラスのコンストラクタが下記のような引数を持つものしか定義されていなかった場合は どの様な振る舞いをするのでしょうか? Hoge(int num); Javaでは引数の有るコンストラクタしか宣言しなかった場合はデフォルトコンストラクタは 作られなかったと思うのですが、c++では引数のないデフォルトコンストラクタができてるのでしょうか? また、デフォルトコンストラクタが出来ていなかった場合、 Hoge hoge; というようにプリミティブ型のような変数宣言の仕方で引数有りのコンストラクタを呼ぶことは出来るのでしょうか?

  • Java初心者です、エラーの意味が理解できません

    今晩は。Java初心者です、宜しくお願いします。 下のようなコードを書きましたが、 「コンストラクタ'sub(int)'は未定義です」、 「/型subのメソッド'disp(int)'は引数()に適用出来ません」というエラーが出ます。 エラーの意味が理解できません。 1.メソッドのみを持ったクラスSubに値をこのような渡し方は不可なのでしょうか。 2.Subには自動的にコンストラクタが生成されないのでしょうか。   されないとすれば、どの部分の書き方が悪いのでしょうか。 3.「型subのメソッド'disp(int)'への引数の渡し方」は、文法的にまずいということでしょうか。 それとも全てコンストラクタの生成が原因なのでしょうか。 ========================================================================= class Sub { void disp(int a) { System.out.println("a = " + a ); } } public class クラス { public static void main(String[] args) { Sub s = new Sub(10); //コンストラクタ'sub(int)'は未定義です s.disp();     //型subのメソッド'disp(int)'は引数()に適用出来ません  } }

    • ベストアンサー
    • Java
  • 継承について(長文です)

    いつもお世話になっています。現在、継承についての練習問題を解いているのですがわからないことがあるので質問させていただきます。 問題は、「自己紹介メソッド(抽象メソッド)を持つIntroduceクラスを作成し、そのクラスを継承してFistsNameクラス、FullNameクラス、IncludeAgeクラスを作成しなさい。三つのサブクラスのインスタンスを混合して配列に保持し自己紹介をしなさい」というものです。 それぞれのクラスはコマンドライン引数で名字(引数一つ)だけ、フルネーム(引数二つ)、フルネームと年齢(引数三つ)と3種類の引数を入力することによって適切なメソッドが呼び出されるということです。(わかりにくい文章ですいません。例えばヤマダと入力すればFirstNameクラスの自己紹介メソッドが呼び出されてヤマダと表示させたいのです)引数をサブクラスに渡さないと行けませんが、まずコンストラクタで引数をサブクラスに渡す場合は引数を一つ(もしくは二つ)しか指定しなかったときはフルネームとフルネーム+年齢のクラスでコンパイルエラー(ArrayIndexOutOfBoundsException)が出ます(これは理解することが出来ます)次にメソッドで渡す場合はシグネチャが異なるのでオーバーライドされずこちらもコンパイルエラーとなります。この他に引数をサブクラスに渡す方法はあるのでしょうか? わかりにくい文章になってしまいましたが、要するに三つのサブクラスをインスタンス化しその後、引数の個数により適切なサブクラスのメソッドが呼び出され引数を連結して表示させたいのです。このようなことは実現できないのでしょうか?if節によって引数の個数で場合分けなどをしないといけないのでしょうか?質問文がわかりにくければ補足させていただきます。よろしくお願いします。

    • ベストアンサー
    • Java
  • オブジェクト生成時のセオリーについて

    オブジェクト指向を採用しているプログラミング言語において、ほとんどの場合、オブジェクト生成時に使用されるコンストラクタは返り値を持てません。 また、コンストラクタにて例外を投げるといったことは推奨されていないケースが多いです。 そんな中で、コンストラクタに何らかの引数を渡してインスタンスを生成するクラスの場合、不十分な引数を渡すことで使用できない状態となるインスタンスが生成されることがあります。 こういったことを踏まえて、渡される引数が適しているものであることを確認する役割というのは使用されるクラス自身が担うのか、クラスを生成する外部の処理(ファクトリー的なクラス・メソッド)が担うのか、どちらが一般的なセオリーなんでしょうか? 無論、不十分なインスタンスが誤って使用されないようにメソッドにエラー処理をかけ、「使用できない状態のオブジェクトである」ことを通知するのは当然なのでしょう。 ただ、最近知り合いから「クラスはできるだけ不変な状態を保つよう設計した方がいい。そのほうが使いやすく、再利用時のバグが減る」という話を聞いて状態を持たないクラスの設計というのを考えこんでしまい、悩んでいます。 わかりにくい質問かもしれませんが、回答よろしくお願いします。