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

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

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

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

Q&A

6回答

212閲覧

java インスタンスの作成[別の方法]

g3Bbaeum

総合スコア11

Java

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

0グッド

0クリップ

投稿2019/06/26 05:47

/*

※部分でインスタンスを生成し、
sub:100
と、出力させて下さい。
但し、
SubTest2 object = new SubTest2();
は禁止とします。
*/

public class Test20 {

void methodA(int input){ System.out.println("super:"+(input*1000)); }

}
class SubTest2 extends Test20 {

void methodA(int input){ System.out.println("sub:"+(input*10)); } public static void main(String[] args){ //※ object.methodA(10); }

}

「SubTest2 object = new SubTest2();」以外の方法が思いつきません。
ネットでも調べましたが、見つけれなかったです。

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

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

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

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

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

guest

回答6

0

SubTest2 object = new SubTest2();
は禁止とします。

ならobjectをsubtestとか別な変数に変えればセーフですかね
冗談です。

SubTest2はTest20を継承しているというのがヒントです。

型宣言時のクラス指定はnewするクラスでなくてもできる場合があります。

Hoge hoge;

のhogeは少なくともHogeクラスの機能を持っていますという意味になります。

Hoge hoge = new Xxx();

new Xxxの部分はHogeクラスの機能を持ったクラスであればOKです。
つまり、Hogeクラス及びそれを拡張したクラスが当てはまります。

投稿2019/06/26 05:57

dice142

総合スコア5158

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

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

swordone

2019/06/26 09:48

「禁止」がどのレベルでの禁止なのか分からないですが、出題意図はおそらくこうだと思われます。
xebme

2019/06/26 10:03

そうですね。
guest

0

これって何かの課題ですよね?
であれば今まで勉強してきた知識でできる範囲の回答を求められていると思います。

とりあえず思いつく方法としてはこんな感じでしょうか。

SubTest2というクラス名でnewするのがNGなら、継承して別クラスにしてしまう。

java

1class SubSubTest extends SubTest2() 2 3...4 5SubSubTest ojbect = new SubSubTest();

newを使うなという話なら、リフレクションを使ってインスタンスを作る。

java

1// 例外処理は適宜追加 2// Class.newInstance() 3SubTest2 object = SubTest2.class.newInstance(); 4 5// Constructor.newInstance() 6// publicなデフォルトコンストラクタがある場合 7SubTest2 object = SubTest2.class.getConstructor().newInstance();

DIコンテナなんて解はさすがに対象外な気がする。

投稿2019/06/26 06:48

kopio

総合スコア487

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

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

退会済みユーザー

退会済みユーザー

2019/06/26 08:32

Class#forName からはじまる・・・
guest

0

この回答は出題者の意図とは異なります。
出題者の問題が、あまりよくないなぁということで回避策のひとつとして提示します。

正しいアプローチは、Dice142さんの回答がよいかと。
※まぁヒントには、なるかも。

java

1Test20 object = new Test20() {void methodA(int i){System.out.println("sub:" + i * 10);}};

投稿2019/06/27 01:02

momon-ga

総合スコア4820

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

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

0

Java

1SubTest2 object = new SubTest2(){};

よく見て。禁止じゃないでしょ。

投稿2019/06/26 09:32

xebme

総合スコア1081

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

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

xebme

2019/06/26 10:14

この回答は悪ふざけです。このままにしておき、永遠に恥をさらしましょう。
guest

0

SubTest2 object = new SubTest2();
は禁止とします

みためにこだわらないならラムダ式で

SubTest2 object = ((Supplier<SubTest2>) SubTest2::new).get();

ともかける(バッドノウハウ)

投稿2019/06/26 08:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

何をすればいいのか、それだけでは明確ではありませんね。

java

1// 例外を投げるので、throwsやcatchの手当も必要 2SubTest2 object = SubTest2.class.newInstance(); 3 4// 「SubTest2 object = new SubTest2();」とは書いていない 5SubTest2 temp = new SubTest2(); 6SubTest2 object = temp;

投稿2019/06/26 05:55

編集2019/06/26 05:57
maisumakun

総合スコア145183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問