C言語・C++ プログラミング

C言語・C++ プログラミング

1090
2014/09/10 22:35

Lobi編集部おすすめ!最新ゲーム情報

2020年11月末〜12月前半『Lobiファミリー人気スタンプ大集合!』動画を観てスタンプゲット!キャンペーンのお知らせ

【予約して特典ゲット】事前登録を活用しよう!

2020年11月後半『Lobiファミリー人気スタンプ大集合!』動画を観てスタンプゲット!キャンペーンのお知らせ

【運営からのお知らせ】LobiアプリのiOS14対応状況とiOS11.x、12.xのサポート終了について

2020年10月末〜11月前半『Lobiファミリー人気スタンプ大集合!』動画を観てスタンプゲット!キャンペーンのお知らせ

最新ゲームニュースをもっと見る
C言語・C++ プログラミングトップに戻る
TSNK

Javaなんですが、他のグル過疎ってるので質問させてください

あるクラス(クラスAとする)のログ出力をするプログラムを書いています。
クラスAは他のクラスを継承していて(クラスBとする)ログ出力したい情報はクラスBのloginfoメソッドをオーバーライドしてユーザが定義します。

ログ出力のコード自体はクラスBに書いてあり、そのうち初期化(インスタンス作成)時のログはクラスBのコンストラクタ内で実行されます。

クラスAを作成したとき、Javaの仕様上クラスBのコンストラクタが先に実行されるため、そこでログ出力が行われ、クラスAの初期化時のloginfoは出力されません。(クラスAのコンストラクタは実行されてないため)

この問題って、なにかいい解決方法あるのでしょうか、長文ですがよろしくおねがいします。

  • クラスAのコンストラクタ内でsuper()を使っているということです。補足

    • 通報する
  • クラスAで使用する情報をクラスBから出力したいが
    クラスBの方が先に動いてしまうので
    クラスAの情報を出力できないでおけ?
    super最後に呼び出しちゃダメなの?
    って書いたけど忘れて

    • 通報する
  • これ普通にBクラスのコンストラクタでログの出力やめてサブクラスでログ出力メソッド呼び出すしかないんじゃない?

    • 通報する
  • Javaの仕様上superは先になりますね、
    できれば親クラスの仕様として書きたいんですよね、やはり難しいですかね

    • 通報する
  • コンストラクタの引数で初期化するシステムならわんちゃん

    • 通報する
  • それはできるんですが、自由度下がるので、方法があるならオーバーライドで書きたいです、、、
    考えてくださってありがとうございます

    • 通報する
  • クラスAが使うデータはどのタイミングで持ってくるの?

    • 通報する
  • コンストラクタに渡しますが、その情報はクラスBに渡すものではないんです、普遍的なものでないので

    • 通報する
  • クラスAのメンバ変数ですね

    • 通報する
  • あー、理解したけど
    スーパークラスからサブクラスのメソッドは見えないからそれは絶対無理だ

    • 通報する
  • やはりそうですか、ありがとうございました

    • 通報する
  • オブジェクト型のListで値渡してtostringbuilderで出力するとかはできんのか?

    • 通報する

画像添付

スタンプ投稿

送信
1000

グループに参加してチャットを楽しもう!

  • 通報する