3 回答
TA贡献1757条经验 获得超7个赞
如果您想了解为什么需要桥接方法,则最好了解没有它的情况。假设没有桥接方法。
class A<T>{
private T value;
public void set(T newVal){
value=newVal
}
}
class B extends A<String>{
public void set(String newVal){
System.out.println(newVal);
super.set(newVal);
}
}
请注意,擦除后,由于Type参数不受限制,因此setin中的方法A成为了。有类没有方法的签名,其中相同的。因此没有覆盖。因此,当发生这种情况时:public void set(Object newVal)TBsetA
A a=new B();
a.set("Hello World!");
多态在这里不起作用。请记住,您需要在子类中重写父类的方法,以便可以使用父类var触发多态。
桥方法的作用是用名称相同但签名不同的方法的所有信息以静默方式覆盖父类中的方法。借助于桥接方法,多态性起作用了。尽管从表面上看,您可以使用具有不同签名的方法覆盖父类方法。
TA贡献1842条经验 获得超21个赞
令人惊讶的是,编译器会推断出该MyComparator方法:
public int compare(Integer a, Integer b) {/* code */}
正在尝试覆盖Comparator<T>的
public int compare(T a, T b);
从声明的类型Comparator<Integer>。否则,编译器会将MyComparators compare作为附加(重载)方法,而不是覆盖该方法。因此,将不会为此创建桥方法。
添加回答
举报