- ベストアンサー
敬称について教えてください
class parent{ protected final static int val=10; } class Child extends Parent{ private int val=100; public void method(String s){ System.out.println(++val)} } } class Test{ int val=10; public static void main(String args[]){ Parent c=new Child(); c.method("HELLO"); } } 初歩的な質問ですみません。教えて下さい。 上記プログラミングで、下から3行目のc.method・・・ を記入してもコンパイルエラーがおこらないのはなぜでしょうか? 今回newしているのはChildのオブジェクトです。 が、型はParentです。 Parentにはmethodはないし、 なぜこれが許されるのかがわかりません。 分かりやすくおしえてもらえませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
変数c の型はParentですから、サブクラスChild のメソッドを c.method("HELLO"); のように呼び出すことはできません。 したがってコンパイルエラーになるはずです。 コンパイルエラーにならないのは、環境上のトラブルでそもそもコンパイルに失敗している、あるいは別のところに定義した同名のクラスを消し忘れている等と思われます。
その他の回答 (2)
- HarukaV49
- ベストアンサー率53% (48/89)
Eclipse等の統合開発環境を使いましょう。 parentとParentで大文字と小文字が混在していますし、 static finalな変数を小文字で定義することも、基本的な規則に反しています。 統合開発環境や専用の高機能エディターを使えば、そのエディター上で どこのメソッドを呼び出しているかを簡単に調べられます。 >Parentにはmethodはないし、 >なぜこれが許されるのかがわかりません。 >分かりやすくおしえてもらえませんか? 問題は、それよりも前の段階にあります。
- koko_u_
- ベストアンサー率18% (459/2509)
>記入してもコンパイルエラーがおこらないのはなぜでしょうか? ウチではエラーになったよ。あなたの環境を補足にどうぞ。 WindowsXP javac 1.6.0_02 Eclipse 3.2.0 「メソッド method(String) は型 Parent で未定義です」