In Effective Java (Chapter 7), it says
Note also that we did not use Date’s clone method to make the defensive copies. Because Date is nonfinal, the c
Consider this code:
public class MaliciousDate extends Date { /** malicious code here **/ }
public class SomeClass {
public static void main(String[] args) {
MaliciousDate someDate = new MaliciousDate();
Date copyOfMaliciousDate = someDate;
Date anotherDate = copyOfMaliciousDate.clone();
}
}
Since copyOfMaliciousDate
is of type Date
, you can call clone()
and it will return a Date
object, but calling clone
on copyOfMaliciousDate
executes the code written in the MaliciousDate
class because the instance stored in copyOfMaliciousDate
is a MaliciousDate
.