話很少說,先上例題this
1 package Ch_11; 2 3 public class Test { 4 public static void main(String[] args) { 5 Object circle1 = new Circle(); 6 Object circle2 = new Circle(); 7 System.out.println(circle1.equals(circle2)); 8 } 9 } 10 11 class Circle { 12 double radius; 13 14 public boolean equals(Object circle) { 15 return this.radius == ((Circle)circle).radius; 16 } 17 }
答案:truespa
1 package Ch_11; 2 3 public class Test { 4 public static void main(String[] args) { 5 Object circle1 = new Circle(); 6 Object circle2 = new Circle(); 7 System.out.println(circle1.equals(circle2)); 8 } 9 } 10 11 class Circle { 12 double radius; 13 14 public boolean equals(Circle circle) { 15 return this.radius == circle.radius; 16 } 17 }
答案:falsecode
看到這裏,小朋友,你是否有不少問好? 固然,別慌,看我下面的講述:blog
(你先要明白,父類不能直接調用子類的方法的!固然強制暴力轉換另說)ci
首先,你看這個代碼,Object circle1 = new Circle(); 這說明circle1聲明爲Object型引用變量,因此是Circle的父類變量, 因此在第七行調用的時候調用的是Object類的equal!!!class
因此circle1 和 circle2 固然是倆個不一樣的引用類型變量,因此返回值固然是false了!變量
還有,你要明白,第一個代碼中的equal只是對父類Object類中equal方法的重載!!!並非重寫,而第二個代碼纔是重寫!!!到這裏,你是否是就豁然開朗了呢?引用
若是還不明白,歡迎私信博主,或在評論區留言!方法