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

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

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

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

Q&A

1回答

868閲覧

newの中にnewをしたらメソッドは使えないのか?

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2018/12/05 12:47

編集2022/01/12 10:55

クラスの中のクラスの中のメソッドの使い方はありますか?

専門学校の授業でインターフェースを習っているのですが、わからないことがあります。
xecuter e3 = new Executer(new Sales());のe3でSalesの中のaddSaleとaddcountを使う方法がありましたら知りたいです
解決方法を教えてください!

該当のソースコード

interface Printable{ public abstract void show(); } class Student implements Printable{ private String _name; private String _address; public Student(String n,String a){ _name = n; _address = a; } public void show(){ Class c = getClass(); String name = c.getName(); System.out.println(name+":"+_name+" "+_address); } } class Product implements Printable{ private String _name; private int _price; public Product(String n,int p){ _name = n; _price = p; } public void show(){ Class c = getClass(); String name = c.getName(); System.out.println(name+":"+_name+" "+_price); } } class Sales implements Printable{ private int _sale; private int _count; public void addSale(int s){ _sale+=s; } public void addCount(int c){ _count+=c; } public void show(){ Class c = getClass(); String name = c.getName(); System.out.println(name+":"+_sale+" "+_count); } } class Executer{ private Printable p; public Executer(Printable p){ this.p = p; } public void showMeth(){ p.show(); } } class sample{ public static void main(String[]args){ Executer e1 = new Executer(new Student("尾崎豊","東京都")); Executer e2 = new Executer(new Product("尾崎豊",12345)); Executer e3 = new Executer(new Sales()); e1.showMeth(); e2.showMeth(); e3.showMeth(); } }

試したこと

Salesの中のaddSaleとaddcountを使いたいです!

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

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

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

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

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

m.ts10806

2018/12/05 12:51

わからないこと、起きている問題はなにでしょうか
退会済みユーザー

退会済みユーザー

2018/12/05 12:53 編集

Executer e3 = new Executer(new Sales());のe3でSalesの中のaddSaleとaddcountを使う方法がありましたら知りたいです
m.ts10806

2018/12/05 12:56 編集

では、質問を編集して聞き方を変えてください。「わからないことがある」「解決方法教えて」のあとに何が分からないか、何が問題かが書かれていない状態で文章がつながっていません
退会済みユーザー

退会済みユーザー

2018/12/05 12:57

すみませんでした
guest

回答1

0

newの中でnewしたら使えるかどうか、というのは本質ではありません(ケースバイケースなので)
今回の場合、Executerクラスがコンストラクタで渡された値を
どのように扱っているか、というのがポイントとなります。

pという変数に代入していますが、
privateなため外部からはアクセスできません。
なので質問の回答としては「不可」となります。
もしアクセスしたいのであれば変数pをpublicで定義して

Java

1((Sales)e3.p).addsales()

とすればアクセス可能かと思います。

以下追記
Executerクラスの中でSalesのメソッドを使いたいのであれば
変数pはprivateのままで構いません。
前述のとおり((Sales)p).addSales()のようにキャストすれば
アクセス可能です。
ただせっかくPrintableで抽象化している中で
Salesという具体的なクラス名で決め打ちで書いてしまうのは
クラスの設計的にどうなんだろう、と思う部分はあります。

投稿2018/12/05 13:30

編集2018/12/05 13:40
take_3306

総合スコア242

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

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

退会済みユーザー

退会済みユーザー

2018/12/05 23:50

ありがとうございます! 参考にさせていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問