本帖最后由 黄鸿达 于 2013-2-5 14:13 编辑
- void show(ArrayList<? extends Person> al){
- for(Iterator<? extends Person>i=al.iterator();i.hasNext();){
- System.out.println(i.next().getName());
- }
- }
- }
- class Person{
- String name;
- Person(String name){
- this.name=name;
- }
- //这里如果修饰符不加public 上面的i.next().getName() 就出错,编译失败
- public String getName(){
- return name;
- }
- }
- class Worker extends Person{
- String name;
- Worker(String name){
- super(name);
- }
- }
复制代码 问题1:为什么如果父类person 的getname方法 不加public ,show方法里i.next().getName()就出问题,就是编译失败。- void show(ArrayList<Person> al){
- for(Iterator<Person>i=al.iterator();i.hasNext();){
- System.out.println(i.next().getName());
- }
- }
- }
- class Person{
- String name;
- Person(String name){
- this.name=name;
- }
- //没加public
- String getName(){
- return name;
- }
- }
复制代码 问题2:为什么如果show方法不加泛型限定<? extends Person>,person的getname方法 不加public 也能打印出来- void show(ArrayList<? extends Person> al){
- for(Iterator<? extends Person>i=al.iterator();i.hasNext();){
- System.out.println(i.next().getName());
- }
- }
- }
- class Person{
- String name;
- Person(String name){
- this.name=name;
- }
- public String getName(){
- return name;
- }
- }
- class Worker extends Person{
- String name;
- Worker(String name){
- super(name);
- }
- //子类加自己的getName方法 然后arraylist加入子类元素,打印出来是null
- public String getName(){
- return name;
- }
- }
复制代码 问题3:为什么如果父类person 的getname方法 加了public,子类也写了个public 的 getname方法 ,然后加入子类元素,打印出来是null
|
|