
java泛型类方法调用的问题
代码如下:publicclassDateIntervalTest{publicstaticvoidmain(String[]args){//TODOAuto-genera...
代码如下:
public class DateIntervalTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Throwable t = new Throwable();
StackTraceElement[] trace = t.getStackTrace();
for(StackTraceElement f : trace)
System.out.println(f + "Main");
DateInterval interval = new DateInterval();
Object aDate = new Date();
Date bDate = new Date();
Pair<Date> pair = interval;
Pair pair2 = interval;
pair.setSecond(bDate);
interval.setSecond(bDate);
interval.setSecond(aDate);
pair2.setSecond(bDate);
pair2.setSecond(aDate);
}
}
class Pair<T> {
public Pair(){
first = null;
second = null;
}
public Pair(T first, T second){
this.first = first;
this.second = second;
}
public T getFirst(){ return first; }
public T getSecond(){ return second; }
public void setFirst(T first){ this.first = first; }
public void setSecond(T second){
Throwable t = new Throwable();
StackTraceElement[] trace = t.getStackTrace();
for(StackTraceElement f : trace)
System.out.println(f + "Pair");
this.second = second;
}
private T first;
private T second;
}
class DateInterval extends Pair{
public void setSecond(Date second){
Throwable t = new Throwable();
StackTraceElement[] trace = t.getStackTrace();
for(StackTraceElement f : trace)
System.out.println(f + "DateInterval");
}
}
运行结果是这样的:
DateIntervalTest.main(DateIntervalTest.java:9)Main
Pair.setSecond(Pair.java:18)Pair
DateIntervalTest.main(DateIntervalTest.java:19)Pair
DateInterval.setSecond(DateIntervalTest.java:30)DateInterval
DateIntervalTest.main(DateIntervalTest.java:20)DateInterval
Pair.setSecond(Pair.java:18)Pair
DateIntervalTest.main(DateIntervalTest.java:21)Pair
Pair.setSecond(Pair.java:18)Pair
DateIntervalTest.main(DateIntervalTest.java:22)Pair
Pair.setSecond(Pair.java:18)Pair
DateIntervalTest.main(DateIntervalTest.java:23)Pair
问题:
pair,pair2和interval对象应该是同一个引用吧?为什么明明调用同一个方法,只有interval.setSecond(bDate)是调用DateInterval类的方法?可以把调用的过程或原理给我讲一下吗?谢谢 展开
public class DateIntervalTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Throwable t = new Throwable();
StackTraceElement[] trace = t.getStackTrace();
for(StackTraceElement f : trace)
System.out.println(f + "Main");
DateInterval interval = new DateInterval();
Object aDate = new Date();
Date bDate = new Date();
Pair<Date> pair = interval;
Pair pair2 = interval;
pair.setSecond(bDate);
interval.setSecond(bDate);
interval.setSecond(aDate);
pair2.setSecond(bDate);
pair2.setSecond(aDate);
}
}
class Pair<T> {
public Pair(){
first = null;
second = null;
}
public Pair(T first, T second){
this.first = first;
this.second = second;
}
public T getFirst(){ return first; }
public T getSecond(){ return second; }
public void setFirst(T first){ this.first = first; }
public void setSecond(T second){
Throwable t = new Throwable();
StackTraceElement[] trace = t.getStackTrace();
for(StackTraceElement f : trace)
System.out.println(f + "Pair");
this.second = second;
}
private T first;
private T second;
}
class DateInterval extends Pair{
public void setSecond(Date second){
Throwable t = new Throwable();
StackTraceElement[] trace = t.getStackTrace();
for(StackTraceElement f : trace)
System.out.println(f + "DateInterval");
}
}
运行结果是这样的:
DateIntervalTest.main(DateIntervalTest.java:9)Main
Pair.setSecond(Pair.java:18)Pair
DateIntervalTest.main(DateIntervalTest.java:19)Pair
DateInterval.setSecond(DateIntervalTest.java:30)DateInterval
DateIntervalTest.main(DateIntervalTest.java:20)DateInterval
Pair.setSecond(Pair.java:18)Pair
DateIntervalTest.main(DateIntervalTest.java:21)Pair
Pair.setSecond(Pair.java:18)Pair
DateIntervalTest.main(DateIntervalTest.java:22)Pair
Pair.setSecond(Pair.java:18)Pair
DateIntervalTest.main(DateIntervalTest.java:23)Pair
问题:
pair,pair2和interval对象应该是同一个引用吧?为什么明明调用同一个方法,只有interval.setSecond(bDate)是调用DateInterval类的方法?可以把调用的过程或原理给我讲一下吗?谢谢 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询