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

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

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

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

Q&A

解決済

4回答

3460閲覧

カプセル化のやり方 get set

naoto_0416

総合スコア15

Java

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

0グッド

1クリップ

投稿2018/09/11 15:05

下記のプロググラムで
すべてのフィールドをカプセル化したいのですが
どのようにコーディングしていいか分かりません。
private を型の前に付けた後のget setのつけ方がわからなくなっている状況です。
よろしくおねがいします。

java

1 2package account.system.dealer.master.companyinfo.bean; 3 4public class CompanyInfoSample { 5 6 public static void main(String[] args) { 7 8 CompanyInfoBean kanri = new CompanyInfoBean(); 9 10 kanri.compNo =1; 11 kanri.compName = "Java研修商事"; 12 kanri.postno = "123-4567"; 13 kanri.address = "東京都〇〇○×××"; 14 kanri.telno = "03-1234-5678"; 15 kanri.faxno = "03-1234-5678"; 16 kanri.person_part = "総務部"; 17 kanri.person_name = "研修太郎"; 18 kanri.bankname = "Java銀行"; 19 kanri.branchname = "研修支店"; 20 kanri.account_type = "普通預金"; 21 kanri.account_no= "123456789"; 22 23 kanri.showInfo(); 24 25 } 26} 27 28 29package account.system.dealer.master.companyinfo.bean; 30 31public class CompanyInfoBean { 32 33 34 int compNo; // 会社番号 35 String compName; // 会社名 36 String postno; // 郵便番号 37 String address; // 住所 38 String telno; // 電話番号 39 String faxno; // FAX番号 40 String person_part; // 担当者部署 41 String person_name; // 担当者名 42 String bankname; // 銀行名 43 String branchname; // 支店名 44 String account_type; // 預金種別 45 String account_no;// 口座番号 46 47 void showInfo() { 48 System.out.println("会社番号 :" + compNo); 49 System.out.println("会社名 :" + compName); 50 System.out.println("郵便番号 :" + postno); 51 System.out.println("住所 :" + address); 52 System.out.println("電話番号 :" + telno); 53 System.out.println("FAX番号 :" + faxno); 54 System.out.println("担当者部署 :" + person_part); 55 System.out.println("担当者名 :" + person_name); 56 System.out.println("銀行名 :" + bankname); 57 System.out.println("支店名 :" + branchname); 58 System.out.println("預金種別 :" + account_type); 59 System.out.println("口座番号 :" + account_no); 60 61 62 63 64 65 } 66 67 68 69}

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

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

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

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

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

guest

回答4

0

ご質問の内容を実現する方法は、既に他の方が書かれた通りですのでそちらを参照頂ければと思います。
私からは、アクセス修飾子についての補足を少しだけ。

Javaにおける以下のようなメンバには必ずアクセス修飾子というものが付きます。

Java

1public int compNo; // 会社番号 2protected String compName; // 会社名 3String postno; // 郵便番号 4private String address; // 住所

アクセス修飾子はそのメンバを参照できる範囲(スコープ)を決めています。

アクセス修飾子同一クラス同一パッケージサブクラスすべて
public
protected×
default(指定なし)××
private×××

今回、ご質問として記載頂いたJavaのコードはアクセス修飾子の明記がないため、
上の表の3つめのdefaultと判断されます。
defaultのメンバは同一クラス内又は同一パッケージ内からアクセスでき、
ご質問のコードは2つのクラスは異なるものの、同一のパッケージに属するクラスであるため、アクセスが可能になっています。

Java

1package account.system.dealer.master.companyinfo.bean;

このメンバを更に制限の厳しいprivateに変更すると、上記の通り、同一クラス内からしかアクセスできなくなります。
そして、このメンバへの値の書き込み/読み出しを行うメソッド(setter/getter)を作成し、このメソッドはpublic等、制限を緩めることで、メンバを直接触るのではなく、メソッドを介してやりとりするというルールを設けるのです。

投稿2018/09/11 16:06

Simb

総合スコア118

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

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

0

ベストアンサー

Java

1int compNo; // 会社番号 2String compName; // 会社名 3String postno; // 郵便番号 4String address; // 住所 5String telno; // 電話番号 6String faxno; // FAX番号 7String person_part; // 担当者部署 8String person_name; // 担当者名 9String bankname; // 銀行名 10String branchname; // 支店名 11String account_type; // 預金種別 12String account_no;// 口座番号

この部分の先頭全てにprivateを書いて、

Java

1public int getCompName() { 2 return this.compName; 3} 4public void setCompName(int compName) { 5 this.compName = compName; 6} 7public String getPostNo() { 8 return this.postno; 9} 10public void setPostNo(String postno) { 11 this.postno = postno; 12} 13

以上のようにひたすら同じようなことを書いていって

Java

1public static void main(String[] args) { 2 CompanyInfoBean kanri = new CompanyInfoBean(); 3 kanri.setCompName(1); 4 kanri.setPostNo("Java研修商事");

最終的にはsetterに値を入れていきます。

EclipseなどのIDEを使っているのなら、
getter/setterの生成だけは一瞬で自動生成できます。

投稿2018/09/11 15:34

編集2018/09/11 15:37
s4i

総合スコア139

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

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

0

回答じゃないですが、と前置きしておいて。

いちいちgetterとsetter書くのめんどくせぇ!って言うのなら、Lombok使いましょう。

Qiita - Lombok 使い方メモ

投稿2018/09/12 13:22

spookybird

総合スコア1803

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

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

0

java カプセル化 のキーワードで検索すると分かりやすい資料がたくさん見つかりますよ。

Google検索 java カプセル化
カプセル化って何?
カプセル化の重要性
オブジェクト指向カプセル化
カプセル化とは?

どのようにコーディングしていいか分かりません。

get,setメソッドとコンストラクタでの初期化の最低限のサンプルコードです。
単純にフィールドの数だけget,setメソッドを作るしかないと思いますがとりあえず参考になればと思います。

###出力結果
イメージ説明

java

1public class MainCp { 2 3 public static void main(String[] args) { 4 5 //初期化用引数 6 int a = 123; 7 String b = "テスト"; 8 9 //Cpクラスを引数を渡してインスタンス化 10 Cp test = new Cp(a, b); 11 12 //getメソッドで値参照 13 System.out.printf("%s:%s%n%n", test.getId(), test.getName()); 14 15 //setメソッドで値更新 16 test.setId(777); 17 test.setName("セット"); 18 19 //printメソッドで出力 20 test.printAll(); 21 22 } 23} 24

java

1public class Cp { 2 3 private int id; 4 private String name; 5 6 public Cp(int id, String name) { 7 this.id = id; 8 this.name = name; 9 } 10 11 public void setId(int id) { 12 this.id = id; 13 } 14 15 public void setName(String name) { 16 this.name = name; 17 } 18 19 public int getId() { 20 return id; 21 } 22 23 public String getName() { 24 return name; 25 } 26 27 public void printAll() { 28 System.out.println(id); 29 System.out.println(name); 30 } 31 32}

投稿2018/09/11 16:55

opyon

総合スコア1009

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問