回答編集履歴
2
コード追加
test
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
`((Object)new java.util.ArrayList()).clone();`
|
2
2
|
は`Object`型としてみたときに`clone()`が見えるかを判断します。
|
3
3
|
オーバーライドの成否は関係なく、`Object`の`clone`はそのスコープから見えないのでエラーになっています
|
4
|
+
|
5
|
+
```java
|
6
|
+
Object hoge = new java.util.ArrayList();
|
7
|
+
hoge.clone();
|
8
|
+
```
|
9
|
+
と分解すればわかりやすいでしょうか、`hoge`の中身は確かに`ArrayList`ですが、
|
10
|
+
変数としての型はあくまで`Object`なので、メソッドの可視性は`Object`として判断します。
|
11
|
+
|
4
12
|
|
5
13
|
---
|
6
14
|
|
1
追記
test
CHANGED
@@ -1,5 +1,11 @@
|
|
1
|
-
((Object)new java.util.ArrayList()).clone();
|
1
|
+
`((Object)new java.util.ArrayList()).clone();`
|
2
|
-
はObject型としてみたときにclone()が
|
2
|
+
は`Object`型としてみたときに`clone()`が見えるかを判断します。
|
3
|
-
Objectのcloneはそのスコープから見えないのでエラーになっています
|
3
|
+
オーバーライドの成否は関係なく、`Object`の`clone`はそのスコープから見えないのでエラーになっています
|
4
4
|
|
5
|
+
---
|
5
6
|
|
7
|
+
> java アクセス修飾子を強める方向でオーバーライドできないのはなぜでしょうか?
|
8
|
+
|
9
|
+
いいえ、できます。
|
10
|
+
「強める」は「より広い公開範囲に」という意味と解釈しましたが、
|
11
|
+
`protected`な`Object::clone()`に対して`public`な`ArrayList.clone()`が用意されている時点でオーバーライドはできています。
|