package com.tao.test;import java.util.Date;
public class Test5{
public static void main(String[] args) throws ClassNotFoundException {
DateInter dateInter=new DateInter();
Pair<Date> pair=dateInter;
pair.setSecond(new Date());
}
}
class Pair<T> {
private T first;
private T second; public Pair() {
first = null;
second = null;
} public Pair(T first, T second) {
this.first = first;
this.second = second;
} public T getFirst() {
return first;
} public void setFirst(T first) {
this.first = first;
} public T getSecond() {
return second;
} public void setSecond(T second) {
System.out.println("父类的方法");
this.second = second;
}
}class DateInter extends Pair<Date> {
@Override
public void setSecond(Date second) {
System.out.println("aa");
}
}先贴代码,下面在问问题,一个个的说,希望大家指导下!!!
我看到类型擦除,也就是说父类的Pair中的setSecond方法被擦除为Object的原始类型public void setSecond(Object second) {
System.out.println("父类的方法");
this.second = second;
}那么在子类DateInter 中又定义了一个setSecond,它们之间形参类型不一样,也就是说不会覆盖,那么就是继承中的重载了。那么为什么在子类不能这样调用 dateInter.setSecond(new Object());
@Override
public void setSecond(Date second) {
System.out.println("aa");
}
}在你的子类中的setSecond方法上你有了@Override注释,表示被注释的方法覆盖了父类中的一个方法。因此,子类不能这样调用 dateInter.setSecond(new Object());
public void setSecond(Date second) {
System.out.println("父类的方法");
this.second = second;
}
看到Override,确实是覆盖了,可是为什么会覆盖啊?
类型擦除后,父类的setSecond参数不是Object吗,参数类型和子类的不一样,为什么会覆盖,应该是重载啊?