这是旧考试的代码段。有人可以给我答案,然后告诉我原因。
import java.util.*;
abstract class A {
abstract void tu();
}
class P extends A {
char c = 'c';
P(char c){ this.c = c; }
P(){ new P('p'); }
public void tu (){ System.out.printf("P.tu->%c\n", c); }
}
class K extends P {
char c = 'c';
K(char c){ this.c = c; }
K(){ new K('k'); }
public void tu (){ System.out.printf("K.tu->%c\n", c); }
}
class E extends K {
char c = 'c';
E(char c){ this.c = c; }
E(){ new E('e'); }
public void tu (){ System.out.printf("E.tu->%c\n", c); }
}
class G extends E {
char c = 'c';
G(char c){ this.c = c; }
G(){ new G('g'); }
public void tu (){ System.out.printf("G.tu->%c\n", c); }
}
public class Question {
static void magic( Queue< ? super … > q ){ ← which class is allowed and why?
q.add( new E('?') );
}
public static void main( String[] args ){
Queue<K> q = new LinkedList<K>();
magic(q);
while ( ! q.isEmpty() ) { q.poll().tu(); }
}
}
我在BlueJ中复制了它,并像这样:
static void magic( Queue<? super K > q );
q.add(new E('?') );
}
但是然后我得到一个标识符异常。
提前致谢!!!
汉斯
最佳答案
这是下界通配符:https://docs.oracle.com/javase/tutorial/java/generics/lowerBounded.html。
对于问题:which class is allowed and why?
答案:A,因为A是所有这些类的父级。我们可以将其用作所有参考。