回答編集履歴

2

コード追加

2024/03/06 00:01

投稿

ozwk
ozwk

スコア13553

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

追記

2024/03/05 23:54

投稿

ozwk
ozwk

スコア13553

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()`が用意されている時点でオーバーライドはできています。