teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

回答内容の誤りを修正

2019/08/07 12:56

投稿

S_kawa
S_kawa

スコア156

answer CHANGED
@@ -1,43 +1,66 @@
1
1
  実際に動かしたいのはbDao#selectHogeですよね?
2
- インスタンス化の際にaDao dao = ...としているのでアクセスできるのはaDaoのメソッドだけです。
2
+ ~~インスタンス化の際にaDao dao = ...としているのでアクセスできるのはaDaoのメソッドだけです。
3
- インスタンス化したdaoはaDaoクラスだからです、という説明で大丈夫でしょうか?
3
+ インスタンス化したdaoはaDaoクラスだからです、という説明で大丈夫でしょうか?~~
4
4
 
5
- 実際のインスタンスには継承したbDaoを含みますが、aDaoとして扱う以上はaDaoクラス以外のフィールドもメソッドも使うことは出来ません。
5
+ ~~実際のインスタンスには継承したbDaoを含みますが、aDaoとして扱う以上はaDaoクラス以外のフィールドもメソッドも使うことは出来ません。~~
6
6
 
7
- したがってこの場合は```bDao dao = new bDao();```とするのが良いでしょう。
7
+ ~~したがってこの場合は```bDao dao = new bDao();```とするのが良いでしょう。~~
8
8
 
9
+ 上記回答は誤りです。
10
+ 他の回答者様の回答やコメントの通り、引数違いではないでしょうか。
11
+ bDaoに同じメソッド名で別の引数を持つメソッドを作ってしまうと呼び出すことが出来ません。
12
+ これは```aDao dao = ```でインスタンス化している為、aDaoのメソッドシグネチャしか認識できない為です。
13
+
14
+ ---
15
+ ご指摘を頂いたので再確認。
16
+ 確かによく考えればオーバーライドされたメソッドが呼ばれますね。
17
+ (自分でもインスタンス化でbDaoになってると言いながら…)
18
+
19
+ Eclipseのハイライト見てA側だなと思って確認せず回答してしまいました。
20
+ 誤った情報を載せてしまい申し訳ございません。
21
+
22
+ ![EclipseのHC](0a30234c78256ec6e1f60edde08c7306.png)
23
+
24
+ 検証コードを分かりやすく変更
25
+ [paiza.ioで実行](https://paiza.io/projects/Kpvxj6MK3mCv9tOXBhCflA)
9
26
  ```Java
10
- public class JIKKEN {
27
+ import java.util.*;
11
28
 
12
- class ADao {
13
- public String aString;
29
+ public class Main {
30
+ public static void main(String[] args) throws Exception {
14
31
 
32
+ ADao dao = new BDao();
33
+ System.out.println(dao.aString);
34
+ //System.out.println(dao.bString);
35
+ System.out.println(dao.procA());
36
+ //System.out.println(dao.procB());
37
+ //System.out.println(dao.procA("追加引数"));
38
+ }
39
+
40
+ public static class ADao {
41
+ public String aString = "AaString";
42
+
15
43
  public String procA() {
16
- return null;
44
+ return "AprocA";
17
45
  }
18
46
  }
19
47
 
20
- class BDao extends ADao {
48
+ public static class BDao extends ADao {
49
+ public String aString = "BaString";
21
- public String bString;
50
+ public String bString = "BbString";
22
51
 
23
52
  @Override
24
53
  public String procA() {
25
- return null;
54
+ return "BprocA";
26
55
  }
56
+
57
+ public String procA(String exArg) {
58
+ return exArg;
59
+ }
27
60
 
28
61
  public String procB() {
29
- return null;
62
+ return "BprocB";
30
63
  }
31
64
  }
32
-
33
- class BLogic {
34
- public void exec() {
35
- ADao dao = new BDao();
36
- String ret1 = dao.aString; //○
37
- String ret2 = dao.bString; //×
38
- String ret3 = dao.procA(); //○ これはADao#procA
39
- String ret4 = dao.procB(); //×
40
- }
41
- }
42
65
  }
43
66
  ```