• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:親のクラスの型で引数を指定して子のメソッド使い)

親のクラスの型で引数を指定して子のメソッド使い

このQ&Aのポイント
  • 親のクラスの型で引数を指定して子のメソッドを使う方法について説明します。
  • 具体的には、Componentクラスのインスタンスを引数として受け取り、TextBoxまたはButtonという子クラスのメソッドを呼び出す場合について考えます。
  • コードの分岐を避けるために、(子クラスのファイナルクラス).メソッド名()のように記述することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

test1の引数の型をInteractableにしてみるとか。 docomoの技術ドキュメントを読んでみた感じ、requestFocusはインタフェースInteractableのメンバなので。

sntbo
質問者

お礼

やってみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • クラスのインスタンスからクラスを知る方法

    メソッドの中で引数がテキストボックスなのかボタンなのか判別させてください。 下のc == TextBoxの部分を正しくしてください。 public static void test1(Component c){ if(c == TextBox)System.out.println("テキストボックス"); if(c == Button)System.out.println("ボタン"); } コンポーネントは下のものです。 /com/nttdocomo/ui/Component.html

    • ベストアンサー
    • Java
  • 指定されたクラスの継承元の確認方法

    Class cls = Class.forName("extendsClass"); Object obj = cls.newInstance(); if (obj instanceof AbstractClass) {   System.out.println("継承してた");   ((AbstractClass)obj).method(); } こんなことをして、objのクラスがAbstractClassを継承しているという ことは確認することが出来たのですが、これはやはり継承しているか どうかを確認する為にインスタンス化を行っています。 指定された名称のクラスが、特定のクラスを継承していた場合に限り、 その名称のクラスをインスタンス化する、 という流れは行えないのでしょうか?

    • ベストアンサー
    • Java
  • クラス変数/メソッドとインスタンス変数/メソッドの見え方について

    Javaの言語仕様(?)についてお教え下さい。 参照変数の型がインスタンスのスーパークラスの型の時、クラス変数/メソッドとインスタンス変数/メソッドの見え方が納得いかずに困っています。 以下のような条件の時です。   ・クラスが2つあり、1つはもう1つのクラスを継承しています。     それぞれを「スーパー」「サブ」と以下で呼びます。   ・インスタンスは"サブ"の型です。   ・上記インスタンスへの参照変数は"スーパー"のクラスの型です。   ・"スーパー"、"サブ"ともに【同名】の「クラス」変数/メソッド、「インスタンス」変数/メソッドがあります。 この場合に、"サブ"のインスタンスを参照している"スーパー"の型の変数を介し、それらにアクセスしたらどれが見えるか?という疑問です。 実験結果では以下のようになりました。           [フィールド]  [メソッド]   [1.static ]  スーパーの   スーパーの   [2.非static]  スーパーの   サブの 納得いかないのは「2.非static」で「フィールド」が、「スーパーの」になるところです。 これも「サブの」になると思っていました。 なぜサブクラスのが見えないのでしょうか? 同名の変数なのでスーパークラスのはサブクラスので隠れされ、サブクラスのが見えると思っていたのですが。 参考書には以下のように書いてありました。   フィールドの場合、参照変数の型のものが見える。   メソッドの場合、インスタンスの型のものが見える。 私には不自然に感じられるのですが、「こういう仕様だから。」と納得するしか無いのでしょうか? 「なぜこうなるか」について説明がある文献、サイトなどありましたらお教えください。 参考までに以下が実験したサンプルコードと結果です。長くて申し訳ありません。 「サンプルコード」 public class Super { static int staticField = 10; int instanceField = 100; static void staticMethod() { System.out.println( "staticField = " + staticField ); } void instanceMethod() { System.out.println( "instanceField = " + instanceField ); } } public class Sub extends Super { static int staticField = 90; int instanceField = 900; static void staticMethod() { System.out.println( "staticField = " + staticField ); } void instanceMethod() { System.out.println( "instanceField = " + instanceField ); } } public class TestStatic { public static void main(String[] args) { // インスタンスはSub、参照変数もSub、という状態。 Sub sub = new Sub(); System.out.println( "実験1" ); System.out.println( "1.クラス変数      " + sub.staticField ); System.out.print( "2.クラスメソッド    " ); sub.staticMethod(); System.out.println( "3.インスタンス変数   " + sub.instanceField ); System.out.print( "4.インスタンスメソッド " ); sub.instanceMethod(); // インスタンスはSub、参照変数はSuper、という状態。 Super sup = new Sub(); System.out.println( "実験2" ); System.out.println( "5.クラス変数      " + sup.staticField ); System.out.print( "6.クラスメソッド    " ); sup.staticMethod(); System.out.println( "7.インスタンス変数   " + sup.instanceField ); System.out.print( "8.インスタンスメソッド " ); sup.instanceMethod(); } } 「結果」 実験1 1.クラス変数      90 2.クラスメソッド    staticField = 90 3.インスタンス変数   900 4.インスタンスメソッド instanceField = 900 実験2 5.クラス変数      10 6.クラスメソッド    staticField = 10 7.インスタンス変数   100 8.インスタンスメソッド instanceField = 900 納得が行かないのは7のところです。 以上よろしくお願いいたします。

    • ベストアンサー
    • Java
  • Java 他クラスの呼び出しが上手くいきません。

    Java初心者です。 過去Q&Aとして掲載されていた「iアプリでのクラスファイルが複数ある時の画面遷移」と同趣旨のことがしたく、記事を参考にプログラムを組んでみました。 しかし、コンパイルの際、画面遷移のための別クラスファイルを呼び出しインスタンス化するところで生じる「シンボルを見つけられません。」というエラーの原因がつかめず困っています。 作成したプログラムのどこがいけないのか、ご教示いただければ幸いです。 作成したプログラム ========= Test01.java ========= import com.nttdocomo.ui.*; public class Test01 extends IApplication implements ComponentListener{ Button btn1; Label lbl1; public void start() { Panel p1 = new Panel(); p1.setTitle("p1"); Label lbl1=new Label("p1に居ます。"); p1.add(lbl1); Button btn1=new Button("next"); p1.add(btn1); p1.setComponentListener(this); Display.setCurrent(p1); } public void componentAction(Component source, int type, int param) { if(type == ComponentListener.BUTTON_PRESSED) { if(source==btn1){ Test02 test02 =new Test02(); //ここでエラーが発生します。 Display.setCurrent(test02); lbl1.setText("p2に遷移"); } } } } ============ Test02.java ============ import com.nttdocomo.ui.*; public class Test02 extends IApplication implements ComponentListener{ Button btn1; Label lbl1; public void start() { Panel p2 = new Panel(); p2.setTitle("p2"); Label lbl1=new Label("p2に居ます。"); p2.add(lbl1); Button btn1=new Button("next"); p2.add(btn1); p2.setComponentListener(this); Display.setCurrent(p2); } public void componentAction(Component source, int type, int param) { if(type == ComponentListener.BUTTON_PRESSED) { if(source==btn1){ lbl1.setText("p1に遷移"); //コンパイルエラーは生じませんが、ラベル表示の切り替えができません。 } } } }

    • ベストアンサー
    • Java
  • Java 型指定を伴わないインスタンスの作成?

    問題集で以下のプログラム(一部)を見かけました。 class Test{ public static void main(String args[]){ new Animal("A"); } } Animalクラスのインスタンスを作成しているということなのですが、 これまでであれば、 Animal a = new Animal(); というようにイコールの左で インスタンスの型と変数を指定する形で学んで来ました。 型や変数を指定しないでインスタンスの作成をすることが できるのですか? 回答をお願いします。

    • ベストアンサー
    • Java
  • 【C#】内部だけで有効なインターフェースを作りたい

    C#2005でコンポーネントを作ろうと思っています。 そこであらゆるコンポーネントに共通な内部インターフェースが存在し、 更にはコンポーネントはいくつかの種類のコンポーネントを継承したいです。 不可能なコードで記すと、このようなことがしたいです。 【拡張TextBox】 public class ExTextBox : AbstractTextBox { } 【抽象TextBox】 public abstract class AbstractTextBox : TextBox, ICommonControl {  public AbstractTextBox() {   _ifMethod();  }  private void _ifMethod() {  ←これ   // 処理  } } 【内部インターフェース】 public interface ICommonControl {  void _ifMethod(); } インターフェースはpublic宣言以外定義が行えず、内部で利用される インターフェースとしては使えません。 別にインターフェースをそのまま実装すれば出来なくはないですが、 外部にインターフェースを実装したメソッドが見えるのはマズいです。 もしくは多重継承的なことが出来れば解決すると思うのですが・・・。 コンポーネントを継承する関係で、直前のクラスはTextBoxやLabelなどと いったクラスを継承するしかない為、それ以外の内部部分を共通化 したい場合に、どうすればいいのか分かりません。 実現させる方法が思いつかない為、何かシンプルな一例をご提示 頂けないでしょうか?

  • 継承・実装の関係で悩んでいます。

    継承・実装の関係について悩んでいます。 ここでは、アクセス制御を考えずに、インスタンスかstaticかabstract(ここではabstract final staticやabstract classのこと)の違いで、どう継承するのか考えています。 // 継承 はメソッドのオーバーライドのことを考えます。(オーバーロードは考えない) クラスAからクラスBでオーバーライドしたメソッドは、 クラスCでさらにオーバーライドできるのでしょうか? クラスCが クラスBのクラスAからオーバーライドしたメソッド をクラスBのメソッドとして見たときに、オーバーライドすることは可能なのでしょうか? クラスA │ インスタンスフィールドA │ staticフィールドA │ │ クラスA() { } │ │ インスタンスメソッドA () { } │ staticメソッドB() { } ↓ クラスB extends クラスA │ インスタンスフィールドA // 継承 │ インスタンスフィールドB │ staticフィールドB │ │ サブクラス1() { } // コンストラクタは継承しない、super()で呼び出す │ │ インスタンスメソッドA () { } // 継承 │ │ インスタンスメソッドB () { } │ staticメソッドB () { } ↓ クラスC extends クラスB implements インタフェースD, ... ↑ インスタンスフィールドA // クラスBのフィールドを継承 │ インスタンスフィールドB // クラスBのフィールドを継承 │ インスタンスフィールドC │ staticフィールドC │ │ サブクラス2() { } │ │ インスタンスメソッドA () { } // クラスBのメソッドを継承 │ インスタンスメソッドB () { } // クラスBのメソッドを継承 │ インスタンスメソッドD () { } // インタフェースDのメソッドを実装 │ インスタンスメソッドE () { } // インタフェースDのメソッドを実装 │ │ │ インスタンスメソッドC () { } │ staticメソッドC() { } │ interface インタフェースD extends インタフェースE ↑ │ staticフィールドD // public static final │ │ インスタンスメソッドD() { } // public abstract │ インスタンスメソッドE() { } // 継承 │ interface インタフェースE staticフィールドE // public static final インスタンスメソッドE() { } // public abstract

    • ベストアンサー
    • Java
  • 【Java】親クラスでMainメソッドの出力

    Javaについてです。 コマンドライン引数を複数渡し、数値の判定をtry/catchで行う。 catchメソッドには「stringFlg = true;」のみ。 渡ってきた値が数字のみの場合は、数値*数値の文字数を出力し、 数字のみでない場合は文字列を逆から1文字ずつ出力する。 上記のプログラムを下記のように変更したいです。 Testクラスで別パッケージのTest2クラスを継承し、Test2のLogメソッドを呼び出す。 引数で渡ってきた値をMainメソッドでコンソールに出力していたところを Logメソッドでコンソールに出力する。 Mainメソッドを呼びだそうとするとコンパイルエラーが起きる上に、 Mainメソッド内でLogメソッドをどこで呼び出せばいいのかイマイチ分かりません。 教えて下さい。 現時点のソースコードです。 package Test; import Test2.Test2; public class Test extends Test2 { public static void main(String[] args) { Test2 Log = new Test2(); boolean stringFlg = false; for (String arg : args) { try { int num = Integer.parseInt(arg); int nums = num * arg.length(); Log.Log(); stringFlg = false; } catch (NumberFormatException e) { stringFlg = true; }if(stringFlg){ char[] chars = arg.toCharArray(); for (int i = chars.length - 1; i >= 0; i--){ char str = chars[i]; Log.Log(); } } } } } package Test2; import Test.Test; public class Test2 { public void Log() { Test2 test2 = new Test(); System.out.println(test.main(args[0])); //コンパイルエラー } }

  • デリゲートで子から親フォームのメソッド実行について

    お世話になります。 .NET C#で開発をしております初心者です。 下記の様なデリゲートで子フォームから親フォームのメソッドを実行 させようとしています。 すると、parent2.MeisaiSyutoku(); の部分で エラーが発生してしまいます。 (エラー内容:NullReferenceExceptionはハンドルされませんでした。        オブジェクト参照がオブジェクト インスタンスに設定されていません。) 同じ子フォームで(親フォームは違いますが)、もう1つデリゲートをやっているのですが それも何か悪かったりするでしょうか。 下記のデリゲートで、デリゲート(2)はちゃんと実行されますが、デリゲート(1)の方でエラー となってしまいます。 どなたかご親切な方、違う方法でも構いませんので、子フォームから 親フォームのメソッドを実行する方法を教えて下さいます様、 宜しくお願い致します。      記 デリゲート(1) 子フォーム側 parent2; //親フォームの参照 public void setOya2(案内書 parent) { this.parent2 = parent; //親フォームから参照を受け取って保持する } private void button2_Click(object sender, EventArgs e) { ~イベント処理~ parent2.MeisaiSyutoku(); //案内書.csのメソッド実行 } 親フォーム側 private void button4_Click(object sender, EventArgs e) { Global.openMOTO = 1; 台帳 n台帳 = new 台帳(); n台帳.setOya2(this); n台帳.Show(); } private delegate void ctlFromChild(); public void MeisaiSyutoku() { new Thread(new ThreadStart(delegate { Invoke((ctlFromChild)delegate { Get_MeisaiSyutoku(); }); })).Start(); } デリゲート(2) 子フォーム側 送り状作成 parent1; //親フォームの参照 public void setOya1(送り状作成 parent) { this.parent1 = parent; //親フォームから参照を受け取って保持する } private void fpSpread1_CellDoubleClick(object sender, CellClickEventArgs e) { ~イベント処理~ parent1.changeTextBox4(zOtodokeSaki);         } 親フォーム側 private void button1_Click(object sender, EventArgs e) { Global.openMOTO = 0; 台帳 n台帳 = new 台帳(); n台帳.setOya1(this); n台帳.Show(); } private delegate void ctlFromChild(); public void changeTextBox4(string str) { new Thread(new ThreadStart(delegate { Invoke((ctlFromChild)delegate { this.textBox4.Text = str; }); })).Start(); }

  • iアプリ 複数パネル切替時の変数受渡(再度)

    すみませんが、再度質問です。 パネルを切替えると、変数が書換えられてません。 import com.nttdocomo.ui.*; public class TEST01 extends IApplication { MainCanvas mc; MainPanel mp; public void start() { mc = new MainCanvas(); mp = new MainPanel(); Display.setCurrent(mc); } } class MainCanvas extends Canvas{ TEST01 app; int data; public MainCanvas() { data=1; //----- data=1 Graphics g=getGraphics(); app = (TEST01)IApplication.getCurrentApp(); } public void paint(Graphics g) { data=2; // ここでdataを書換えてるのに・・・・ g.drawString("data="+data,100,100); g.drawString("セレクトキーで画面切替",50,200); } public void processEvent(int type, int param) { if (type == Display.KEY_PRESSED_EVENT) { if (param == Display.KEY_SOFT2) { IApplication.getCurrentApp().terminate(); } if (param == Display.KEY_SELECT) { Display.setCurrent(app.mp); } } } } class MainPanel extends Panel implements ComponentListener{ TEST01 app; Button b1; Label l1; public MainPanel() { app=(TEST01)IApplication.getCurrentApp(); l1=new Label("data="+app.mc.data); //書換えたdata=2にならないのはなぜ? b1=new Button("Push me"); add(l1); add(b1); setComponentListener(this); } public void componentAction(Component c,int type, int param){ if (c == b1 && type == BUTTON_PRESSED) Display.setCurrent(((TEST01)IApplication.getCurrentApp()).mc); } } data=1だったのをdata=2にしたのに、1のままです。

    • ベストアンサー
    • Java