OK、初歩的な質問です。私は SCJP の勉強をしていますが、オブジェクト参照のキャストが間違っていることについて 3 つの質問を受けましたが、これらはすべて同じ誤解を示しているようです。正しい洞察がどうあるべきかを確認したかっただけです。そうですね、質問は次のとおりです。
-
1.
1.クラスCodeWalkFour { 2. public static void main(String[] args){ 3. 車 c = new Lexus(); 4. System.out.print(c.speedUp(30) + " "); 5. レクサス l = new Lexus(); 6. System.out.print(l.speedUp(30, 40, 50)); 7。 } 8.} 9. 車のクラス { 10. プライベート int i=0; 11. int speedUp(int x){ 12.私を返します。 13.} 14.} 15.クラスレクサスは車を拡張します{ 16. プライベート int j = 1; 17. プライベート int k = 2; 18. int speedUp(int y){ 19. j を返します。 20.} 21. int speedUp(int... z){ 22. k を返します。 23.} 24.}
3 行目以降の c は Lexus ではなく Car であると考えたため、Lexus.speedUp メソッドではなく、Car.speedUp メソッドが呼び出されます。呼ばれるのは後者であることがわかりました。
-
2.
1. クラス StudentProb { 2. プライベート int 学生 ID = 0; 3. void setStudentID(int sid) { 4. Student_id = sid; 5. System.out.println("生徒IDを" + sidに設定しました); 6.} 7. public static void main(String args[]) { 8. int i = 420; 9.オブジェクトob1; 10. StudentProb st1 = new StudentProb(); 11. ob1 = st1; 12. st1.setStudentID(i); 13.} 14.}
同じ問題。11 行目で st1 が StudentProb ではなく Object になると思いました。コンパイラはどのようにして setStudentID を見つける場所を知るのでしょうか?
-
3.
1. レクチャーホール lh = new レクチャーホール(); 2.講堂a1; 3. 施設 f1; 4. 5. f1 = lh; 6. a1 = f1;
施設はインターフェースです。クラス ClassRoom は施設を実装し、Auditorium と LectureHall は ClassRoom のサブクラスです。同じ質問: 5 行目以降、f1 と lh の両方が LectureHall になると思いました。しかし、f1 はまだ施設です。では、ここでキャストは正確に何をしますか?
皆さんありがとう!
PS: どういうわけか、コードの書式設定が機能しません。自由に編集してください。