継承についてです。
class A {
int x;
}
class B extends A{
public int test(){
return 1;
}
public static void main(String[]args){
A a = new B;
a.test();
}
}
としたとき
a.test();
という記述はできないものなのでしょうか?a.textでコンパル時にエラーが出ます。aはBのインスタンスを指しているから、test()もつかえるんじゃないかなとおもったのですが・・・
public int test(){return 0;}というのをクラスAに記述すればエラーは起こりませんが、これはわかります。
ウェブを探したのですが、検索の仕方が悪かったのかこれに関する記事をさがせなかったので質問いたしました。
No.1
- 回答日時:
考え方が逆のような気がします。
Aが親でBが子なので、
Aで宣言されたメソッドをBで使うことは出来ても、
Bで宣言されたメソッドはAで使うことは出来ないと思います。
なので、Aのほうにtestメソッドを作成し、
Bの宣言をなくして使うのが普通かと。
>なので、Aのほうにtestメソッドを作成し、
>Bの宣言をなくして使うのが普通かと。
これは大丈夫です。私が書いたソースは実際書いているソースをかなり簡略して書いてしまったので、変なソースに見えてしまったのかもしれません・・・
A a = new B
としたときに a は Bの参照先が代入されてしまっているわけですよね? #2さんのおっしゃるとおりキャストされたような形なので、Bのメソッドをそのまま使えるんじゃないのかなっておもってしまったんです。 書式的にAにはtestメソッドが無いから、a.test()というのはまずいというのはわかるのですが、Bにキャストしてるんだからいいんじゃないの?って疑問に思っちゃってました
No.5ベストアンサー
- 回答日時:
そのオブジェクトがどのクラスなのかというのは、インスタンス自体に対して決まるのではありません。
それを入れる変数で決まるのです。Bのインスタンスを生成しても、A型の変数aに入れたらそれはAのインスタンス(つまりtest()がない)なのです。
もちろんこれはBがAを継承しているからこそできることなのですがね。
また、余談になりますが、Bにキャストしても使えるというのも、もともとBのインスタンスとして生成したからこそです。そうでなければ、Bにキャストしたからと言ってtest()が使えるとは限りません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java final 1 2022/06/10 22:49
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
変数名の付け方
-
VB.NET getとsetの概念がわかり...
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
抽象クラスのインスタンス生成...
-
オブジェクト参照がオブジェク...
-
他のファイルの変数参照
-
クラス型がインスタンス化され...
-
エクセル(複数インスタンス)...
-
C#において、同じインスタンス...
-
VB6.0のクラスで、自分自身のイ...
-
マルチスレッドでのインスタン...
-
文字列を日付に変換でParseExce...
-
String型もしくはint型をIntege...
-
VC#での24ビットbmp形式での保...
-
newしないインスタンス?実体化...
-
生成したインスタンスを削除す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
newしないインスタンス?実体化...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
-
エクセル(複数インスタンス)...
-
C#「オブジェクト参照が必要で...
-
他のファイルの変数参照
おすすめ情報