• ベストアンサー

参照型クラスキャストで実行時エラーにならないパターン

neko_nokoの回答

  • ベストアンサー
  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.2

ちょっと想定と違うかもしれないけど、例えば、 SUB v_sub = new SUB();      //(1)SUB型の変数にSUBのインスタンス SUPER v_super = v_sub;      //(2)それをSUPER型の変数に代入 SUB v_sub2 = (SUB)v_super;    //(3)SUPER型の変数をSUBにキャストして代入 要するに、もともとSUBのインスタンスだったもの(1)を SUPERに代入した場合(2)、見かけの型はSUPERです(v_superのこと)。 しかし実体(インスタンス)はSUBなので、(3)のように、 「SUPERをSUBにキャスト」してもエラーにはなりません。

関連するQ&A

  • 実行時エラーについて

    お世話になっています。教えて下さい。 VBで作ったプログラムです。 デバッグ時には何の問題もなく、実行可能(完全コンパイル後に実行)で、コンパイルも問題なく通りますが、EXEにして実行すると、以下のエラーが出ます。 実行時エラー:'91' object変数、またはwithブロック変数が設定されていません。 どなたか、原因に心当たりがある方、いらっしゃったら教えて下さい。 よろしくお願いします。

  • 総称型のキャストでエラー

    下の書き方で、※1はエラーにならないのですが ※2ではエラーになります。 ※1がキャスト可能であれば、 ※2も可能だとおもうのですが。 Java7を使っています。 public class Soushou { void test() { List<Kodomo> kodomoList = new ArrayList<Kodomo>(); List<? extends Oya> oyaList = kodomoList; Object o1 = (List<Oya>) oyaList; // ※1 エラーにならない。 Object o2 = (List<Oya>) kodomoList; // ※2 「キャストすることができません」エラーになってしまう。 } } class Oya { // 親クラス } class Kodomo extends Oya { // 親クラスを継承した子クラス }

    • ベストアンサー
    • Java
  • エクセルでマクロを実行するとコンパイルエラー

    エクセルでVBエディタでソースコードを記述し、マクロを実行すると、コンパイルエラー、「SubまたはFunctionが定義されていません」とエラーが出ます。これはどういうエラーですか?何が間違っているのですか?

  • 自分で作ったクラスを継承するとエラーが出ます。

    サーブレットを勉強しているのですが、自分で作成したクラスを継承した サーブレットを作成してコンパイルするとその継承したクラスの シンボルを解釈できませんというエラーが出ます。 たとえばclass01というクラスを継承したclass02.javaをコンパイルすると シンボルを解釈できません public class02 extends class01{ といったエラーが出てしまいます。 どうも自分で作ったクラスを読み込めていないようなのですが どうしたらよいのでしょうか? 初歩的な質問かもしれませんが、よろしくお願いします。 ちなみにOSはWin2000、サーブレットはJRUNを使用しています。

    • ベストアンサー
    • Java
  • VBAで実行時エラー 1004 がでる

    Excel2013です。以下のコードでエラーがでます。 どのシートがアクティブでもデータを閉じる時に特定のシート(sheet1)のA行の最終行の一つ下をアクティブにし上書き保存して閉じるようにしたいです。 以下記述したコードです。 Sub Auto_Close() Worksheets(1).Activate Range("A60000").End(xlUp).Offset(1).Select 'Aセル60000から最終行のセルの一つ下に下がる ActiveWorkbook.Save End Sub 閉じるときは問題ないのですが、開いたときにエラーがでます。 以下エラー文です。 実行時エラー 1004 'Worksheets'メソッドは失敗しました'_Global'オブジェクト どこを直せばいいのでしょうか? アドバイス願います。

  • import時のコンパイルエラー

    Java初心者です。 現在、あるマニュアルにより勉強をしております。 以下の様に簡単なクラスを2つ作成しようと思って おりますが、どうもマニュアル通りにやってもコンパイル エラーが発生します。 まず、以下は成功し、printer.classが作成されます。 <printer.javaの中身> public class printer { public void print() { System.out.println("printer class OK"); } } 次に、上記クラスを使用する以下のクラスのコンパイル を行うと、エラーが発生します。 <app.javaの中身> import printer; public class app { public static void main( String[] args ) { //printerクラス利用 (new printer()).print(); } } エラー内容: app.java:2: '.' がありません。 import printer; ^ どうも、インポート時のprinterクラスの指定方法が悪そうなのですが、わかりません。一応マニュアル通りに記述しているつもりです。環境はwin2000,java1.4.1_02です。以上、よろしくお願いします。 ※編集内容を確認すると、文頭のスペース、タブが全部削除されてしまい、大変みにくくなってしまいました。

    • ベストアンサー
    • Java
  • java作成時のエラー

    javaの勉強を始めたばかりの初心者です。 教えていただけると嬉しいです。 前回の質問の内容が説明不足でしたので出し直しました。 よろしくお願いします。 (1)class Test で問題なくコンパイル出来たのですが、 その後HTMLファイルを開いても、アプレットは表示されず真っ黒な画面が出るだけでした。 何が原因なのでしょうか。宜しくお願い致します。 ------------------ import java.awt.*; import java.awt.event.*; public class Test extends Frame { public Test() { super(); setTitle("Hello"); setSize(200,100); setLayout(null); Button mybutton = new Button("OK"); mybutton.setBounds(100,100,100,25); this.add(mybutton); mybutton.addActionListener(new ClickAction()); } public static void main (String args []) { new Test(); } } class ClickAction implements ActionListener { public void actionPerformed(ActionEvent ev){ System.exit(0); } } -------------- <HTML> <BODY> <APPLET WIDTH="500" HEIGHT="500" CODE="Test.class"> </APPLET> </BODY> </HTML> -------------- (2)IntegerTextField1のコンパイルは成功したのですが、その後Anwendung1のコンパイル時に、 下記エラーが出てしまいます。どちらも同じフォルダに入っています。 何が原因なのでしょうか。。どうぞ宜しくお願い致します。 C:\java\a>javac Anwendung1.java Anwendung1.java:32: cannot find symbol symbol : class IntegerTextField1 location: class Anwendung1 IntegerTextField1 tf1 = new IntegerTextField1 (); ^ Anwendung1.java:32: cannot find symbol symbol : class IntegerTextField1 location: class Anwendung1 IntegerTextField1 tf1 = new IntegerTextField1 (); ^ 2 errors --------------- import java.io.*; import java.awt.*; import java.awt.event.*; class IntegerTextField1 extends TextField implements Serializable { public IntegerTextField1 () {

  • 継承とオーバーライド

    サブクラスのインスタンスを、スーパークラスの変数に代入するときの考え方が分かりません。下記のプログラムを実行すると x: 10 Sub という結果にります。 spで、message()を呼び出してるのだから、Superクラスのmessage()が処理されるのではないでしょうか? また、コメントアウトすると、コンパイルエラーになる理由もわかりません。 上記の答えのように、Subクラスのmessage()を参照できるのでしたら、printY()も参照できるんじゃないのかって思います。 基本的な質問かもしれませんが、よろしくお願いします。 class Super{ int x = 10; void printX(){ System.out.println("x:" + x); } void message(){ System.out.println("Super"); } } class Sub extends Super{ int y; void printY(){ System.out.println("Y:" +y ); } void message(){ System.out.println("Sub"); } } class ExtensSample01{ public static void main(String[] args){ Super sp = new Sub(); sp.printX(); // sp.printY(); sp. message(); } }

    • ベストアンサー
    • Java
  • エクセル2000で動いたマクロが2003で実行時エラー!

    会社のWindows2000、エクセル2000では問題なく動いたマクロですが Sub test01() ActiveSheet.Protect , Password:="XX", UserInterfaceonly:=True End Sub これを自宅のWindowsXP エクセル2003でうごかすと実行時エラーがでます。 「実行時エラー448 名前付き引数が見つかりません。」となってしまうのです。 Sub test02() ActiveSheet.Protect , UserInterfaceonly:=True End Sub とすれば動くのですが、そうするとシートに保護がかかっているのでパスワードを聞いてくるようになってしまいます。 エクセル2003ではどのように書くべきなのでしょうか?できれば2000も2003も共通の記述でOKになるようにしたいのですが。 ご教示をお願いします。

  • 実行時エラー1004が出たり出なかったりします

    マクロ初心者です。 エクセルへ入力したものを別のエクセルへ入力するマクロを作り、 何人かへメールで送信しました。(OutLook) 私自身が動作確認すると、きちんとマクロが動くのですが、 メールを受取って保存した人は、なぜか実行時エラー1004が 出る人・出ないで動く人…と色々でした。 (保存時にエクセルの名前などは変更していません) ちなみに、マクロのセキュリティレベルを下げただけで きちんと動くようになった人もいるので、コード記述以外の 原因(設定的なもの?)なのかもしれないのですが、 一体どうすれば全員エラーが出ないようになるのかサッパリわからず 苦慮しております。 なお、コードは以下のようになっています。 Sub 集計表入力() Dim a As String ←以下、同様の変数宣言が20コぐらい a = Range("T3").Value ←これもT4,T5,T6…と変数の数だけ続きます Workbooks("集計.xls").Activate Worksheets("DATA").Range("A65536")_ .End(xlUp).Offset(1).Select Dim zz As Integer zz = ActiveCell.Row Cells(zz,1).Value = a ←以下(zz,2)(zz,3)…と続きます ActiveWorkbllk.Save End Sub 上記は標準モジュールに記述、コマンドボタンにマクロを登録して ボタンを押すと「集計」というエクセルに入力できるように なっているのですが…。同じマクロが動いたり動かなかったり するんでしょうか? とっても困ってます。アドバイス宜しくお願いいたします。m(_ _)m