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

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

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

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

Q&A

解決済

2回答

3195閲覧

【Java】staticメソッドとインスタンス変数

ryoko

総合スコア13

Java

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

1グッド

1クリップ

投稿2017/07/10 08:40

Javaのstaticメソッドとインスタンス変数のスコープについて不明点があります。
以下のコードにおいて、

Java

1public class Test { 2 private String id; 3 private boolean isCorrect; 4 5 public String getId() { 6 return id; 7 } 8 9 public void setId(String id) { 10 this.id = id; 11 } 12 13 public boolean isCorrect() { 14 return isCorrect; 15 } 16 17 public void setCorrect(boolean isCorrect) { 18 this.isCorrect = isCorrect; 19 } 20 21 public static Test copy(Test oldS) { 22 Test newT = new Test(); 23 newT.setId(oldS.getId()); 24 newT.setCorrect(oldS.isCorrect); 25 return newT; 26 } 27 28 @Override 29 public String toString() { 30 return "Test [id=" + id + ", isCorrect=" + isCorrect + "]"; 31 } 32 33} 34

copyメソッド(staticメソッド)内で、
isCorrectのインスタンス変数にアクセスしていますが、
エラーにならないのは何故でしょうか。

Java

1newT.setCorrect(oldS.isCorrect); 2

以下のように書かなくても問題ないのでしょうか。

Java

1newT.setCorrect(oldS.isCorrect()); 2

ご存知の方いらっしゃいましたら、ご教示ください。

szk.👍を押しています

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

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

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

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

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

guest

回答2

0

はい、Javaのprivateはあくまで同じクラス内からしかアクセスできないだけなので、同じクラスのstaticメソッドからインスタンスのフィールドにアクセスしたり、インスタンスメソッドから同じクラスの別インスタンスのフィールドにアクセスすることもできます。

これに対して、Rubyのprivate同じインスタンスからしかアクセスできません。

投稿2017/07/10 08:48

maisumakun

総合スコア145183

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

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

szk.

2017/07/10 08:57

横から失礼します。 勉強になりました。 要するに 「 newT.setId(oldS.getId());」も 「 newT.setId(oldS.id);」と書けるし、 むしろ 「 newT.id = oldS.id;」と書けるということですよね。 用途がクラス内だけであれば、 publicなgetter/setterがいらないってことですか!! 知らなかったー
ryoko

2017/07/10 09:33

ご回答ありがとうございます。 アクセス権の問題だったんですね、 改めて詳しく知る機会になりました。勉強になりました。
guest

0

ベストアンサー

privateは同じクラス内からは自由に参照できます。
oldSはTestクラスのインスタンスであり、Testクラス内で参照しているので
oldS.isCorrectで問題はありません。

ただ、isCorrect()とisCorrectで紛らわしくなっているのが問題でしょう。
booleanの命名規則はis変数名が主流ですが、
JavaBeans的に考えるのならば
isCorrected()とcorrectedでもよいのではないでしょうか。

投稿2017/07/10 09:06

編集2017/07/10 09:09
elz4m

総合スコア69

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

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

ryoko

2017/07/10 09:31

ご回答ありがとうございます。 納得しました & 勉強になりました。。 名前は、確かに分かりづらいですね。検討いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問