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

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

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

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

Q&A

解決済

4回答

4565閲覧

Java classとobjectの違いについて

masaakitsuyoshi

総合スコア102

Java

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

0グッド

0クリップ

投稿2016/03/03 09:12

javaとjapascriptを同時に学んでいる初心者なのですが、
classとobjectの違いが今ひとつわかりません。二つの言語によって意味は変わりますか?

class gorilla {
String name;
String age;
String bloodType;

};

gorillaのage,name, bloodtypeなどゴリラの情報をまとめたものがclass

旭山動物園の、太郎くん、よしこちゃんという具体例を考えた時、

太郎くん(ゴリラ)
よしこ(メスゴリラ)

tarou
yoshiko

がインスタンス

という理解であってますか?

ではobjectは???と聞かれるとclassとの違いがよくわかりません。。。

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

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

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

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

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

guest

回答4

0

言葉の定義の話は前提でどうとでも変わるので難しいです。

"Object"は
ものすごく広い意味では、
何らかのデータ構造であり、
メモリ上に値として存在し、
名前を通じてアクセスできる。ものです
この文脈だと例えばint x = 0xはオブジェクトです。
またこの文脈だと関数もオブジェクトです。

オブジェクト指向の文脈だと
「データと、それに対する操作を持つもの」になります。

"Class"は
クラスベースのオブジェクト指向において
オブジェクトの型であり、テンプレートです。
例えば、32ビット浮動小数点数を表すオブジェクトのグループを
いろんな言語でfloatと呼称します。
(そのいろんな言語は単なる数値を表す型をクラスと呼ばないことが多いですが)

そしてJavaやC#などなどでは、何らかのオブジェクトの型をクラスと呼ぶ(一部例外あり)ので、
じゃあすべてのクラスの大本の型の名前は"Object"クラスだ!と命名していたりします。ややこしい。

で、"Instance"は、実際に生成されたオブジェクトのことです。
あるクラスAを元にして作られたオブジェクトのことを指して、
「Aクラスのインスタンス」などと呼びます。

とまあ文脈でいろいろ意味が変わります。

Javaだったら
オブジェクト=インスタンス=データの実体
クラス=オブジェクトの型
オブジェクトクラス = Javaのすべてのクラスの基底クラス

ぐらいの認識で問題ないと思います。

投稿2016/03/04 04:33

編集2016/03/04 04:59
ozwk

総合スコア13521

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

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

masaakitsuyoshi

2016/03/04 08:46

なんかわかったようなわかってないような、、、という感じです。 >>> Javaだったら オブジェクト=インスタンス=データの実体 クラス=オブジェクトの型 オブジェクトクラス = Javaのすべてのクラスの基底クラス ぐらいの認識で問題ないと思います。 多分、英語と同じで意味を考えるより手を動かした方が良さそうです。
guest

0

ベストアンサー

人(class)
・・ 太郎(インスタンスA)
・・ 花子(インスタンスB)

オブジェクト指向は普段↑のように学ぶと思いますが、その上に立つのがObjectです。

もの(Object)
・・人(class)
・・・太郎(インスタンスA)
・・・花子(インスタンスB)

なので、全てのインスタンスはObject型で定義した変数に入れる事が出来ます。

Java

1public Class Human{ 2... 3} 4Objcet obj = new Human();

因みにJavaScriptにはクラスと言う概念がありません。
クラスのように使えるように頑張っているだけです。

投稿2016/03/03 09:58

編集2016/03/03 09:59
lilithchan

総合スコア249

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

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

masaakitsuyoshi

2016/03/04 03:52

>>JavaScriptにはクラスと言う概念がありません。 こんがらがってきました。。。 もの(Object) ・・人(class) ・・・太郎(インスタンスA) ・・・花子(インスタンスB) すべてのクラスはオブジェクト?という感じでしょうか。 ということは関数もオブジェクト?と言える??
lilithchan

2016/03/04 04:57

>すべてのクラスはオブジェクト?という感じでしょうか。 ・太郎(インスタンス)は人(Class)であり、もの(Object)でもある ・花子(インスタンス)は人(Class)であり、もの(Object)でもある ・犬(インスタンス)は動物(Class)であり、もの(Object)でもある と言う感じで考えるとわかり易いと思います。 >ということは関数もオブジェクト?と言える?? 関数(メソッド)は振る舞いです。 インスタンスがどのような行動が出来るかを示すものです。 JavaScriptはそもそもオブジェクト指向ではなく、プロトタイプ指向と呼ばれるものです。 オブジェクト指向を学びたいのであれば、Javaに絞って勉強する方がよいです。
masaakitsuyoshi

2016/03/04 08:44

Javaの場合、 class Pc { String windowsize; String maker; String color; }; だと、 もの(Object)  PC(Class) というとき、 Acer(インスタンス) Huwaii(インスタンス) Dell(インスタンス) という理解であってますか? もの(Object)がClassの上に付く意味があまりよくわからないのですが、何故なのでしょうか。。。
lilithchan

2016/03/04 08:58

その理解であっています。 後々、継承と言う言葉が出てくると思いますが、上の内容を継承に置き換えて言うと 全てのClassはObjectを継承している と言う事になります。 継承したClassは、継承元Classの機能を継承(引き継ぐ)事が出来ます。 なので、全てのClassはObjectが持っている機能を使用する事が出来ます。 更に言えばObjectもClass(一般には基底クラス、スーパークラスと呼びます)です。 ここら辺は継承を学べばわかるかと思いますので、学習を進めてみてください。
guest

0

Javaでは一番親のスーパークラス(すべてのクラスのルートとなるクラス)がObjectクラスです。
一番親のスーパークラスをObjectに持つクラスのインスタンスはオブジェクトになります。

Javaではそれに属していない型もあって、プリミティブ型と言います。
プリミティブ型には、int, floatなどの数値型やbooleanなどがあります。
プリミティブ型ではフィールドやメソッドなどを持たせることができません。

JavaScriptもすべてのクラスのルートとなるクラスがObjectクラスですが、数値型(Integerなど)もObjectクラスがルートなので、そこはJavaとは違います。

例えば、JavaScriptでは1.toString()と書くことができますが、Javaではできません。
Javaではオートボクシングの機能によりプリミティブ型をオブジェクトのように振る舞わせることができますが、常にオブジェクトのように扱えるわけではありません。

投稿2016/03/03 09:45

argius

総合スコア9388

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

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

masaakitsuyoshi

2016/03/04 03:58

ちょっと私には難しいようです。。。
guest

0

tarou, yoshiko というのが Gorilla クラス(例文では class gorilla となっていますが、Javaに置いてクラス名の最初の1文字目は大文字で始めるのが一般的です。)の変数であり下記のような想定なら
仰る通りの理解で正しいですよ。
Javaについての文脈で object と言う場合はほぼ object = インスタンスと思ってもらっても構わないと思います。

java

1Gorilla tarou = new Groilla('tarou', 10, 'A'); 2Gorilla yoshiko = new Groilla('yoshiko', 8, 'B');

ただし JavaScript におけるオブジェクトとは {} を使ったデータのことです。
上記の例をJavaScrioptで書くなら下記のとおりです。

javascript

1var tarou = { name: 'tarou', age: 10, bloodType: 'A' }; 2var yoshiko = { name: 'yoshiko', age: 8, bloodType: 'B' };

投稿2016/03/03 09:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

masaakitsuyoshi

2016/03/04 03:55

なんとなく意味がわかりました。 大文字で始めるんですね! では、上の例だと、Javaは Gorilla というclassがあって、 プロパティ?がname age bloodTypeとかいろいろあり、 インスタンス(オブジェクト)が tarou yoshiko...という感じでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問