日期:2014-05-20  浏览次数:20718 次

为什么这个程序的System.out.println(m.getFirst().getGender());没有输出
如题,程序能够运行,程序的20行的输出似乎没有输出,是个空白,我觉得它应该与28行的输出性质是一样的,但是28行有输出,20行没有?为什么?


import java.util.*;

public class Test2
{
public static void main(String[] args)
{
C b = new C("ppp", 20, 'F');
C c = new C("abc", 30, 'M');
A<B> x  = new A<B>(b, c);
printC(x);


C d = new C("opq", 15, 'M');
C e = new C("rst", 45, 'F');
C f = new C("rrr", 30, 'F');

A<C> m = new A<C>(d, e);

anothePrint(f, m);
System.out.println(m.getFirst().getGender());
}

public static void printC(A<? extends B> p) 
{
B first = p.getFirst();
B second = p.getSecond();

System.out.println(first.getName());
}

public static void anothePrint(C n, A<? super C> p) 
{

   p.setFirst(n); 
}


}

class A<T>
{
public A(T first, T second)
{
this.first = first;
this.second = second;
}

public void setFirst(T newValue)
{
first = newValue;
}
public T getFirst()
{
return first;
}

public void setSecond(T newValue)
{
second = newValue;
}
public T getSecond()
{
return second;
}



private T first;
private T second;
}

class B
{
public B(String name, int age)
{
this.name = name;
this.age = age;
}

public String getName()
{
return name;
}

public int getAge()
{
return age;
}
private String name;
private int age;
}

class C extends B
{
public C(String name, int age, char gender)
{
super(name, age);
gender = 'F';
}

public void setGender(char x)
{
gender = x;
}

public char getGender()
{
return gender;
}
private char gender;

}




------解决方案--------------------
问题在类C的定义,里面的私有变量 gender 一直是默认值,代码里没有给赋值。
改一下第98行,
gender = 'F';

为:

this.gender = gender;

------解决方案--------------------
你看看你的类C的构造方法,gender是指传入的参数啦,前面要加个this;
疑问你这个构造方法传入的gender有何意义?