public class Fu { int a= 1; public void show(){ System.out.println("父类的方法"); }}public class Zi extends Fu{ int a=2; public void show(){ System.out.println("子类的方法"); }} public class Test { public static void main(String[] args) { Fu f =new Fu(); Zi z= new Zi();
楼主对继承的理解稍微有些小偏差,对于子类和父类如果具有相同的变量名,那么父子类之间的变量是相互隐藏的(这个跟函数不同,函数是覆盖,而变量不是),也就是说,父类只能找到父类的a、子类只能看到子类的a。所以当楼主返回一个父类(实际上是子类),再用父类去访问a变量时,由于上面说的隐藏关系,这时父类只能找到父类的a。class Fu { public int a = 2; public Fu(){ a = 2; }
public void show(){ System.out.println(this.a); } }class Zi extends Fu{ public Zi(){ a = 1; } @Override public void show(){ System.out.println(this.a); } }楼主可以通过以上方式,实现返回父类,并且再通过父类找到子类的a变量。
int a= 1;
public void show(){
System.out.println("父类的方法");
}}public class Zi extends Fu{
int a=2;
public void show(){
System.out.println("子类的方法");
}}
public class Test {
public static void main(String[] args) {
Fu f =new Fu();
Zi z= new Zi();
System.out.println(test(z).a); //打印出来的是子类的对象变量a
}
public static Fu test(Zi zi){
return zi;
}}
System.out.println(test(z).a); //打印出来的是子类的对象变量a
这一段写错了,实际打印出来的是父类的对象变量a, 但我传递进去的是子类的对象z
如果你想返回子类对象,可以用强制转换
System.out.println( ((Zi) test(z)).a);
public int a = 2;
public Fu(){
a = 2;
}
public void show(){
System.out.println(this.a);
}
}class Zi extends Fu{
public Zi(){
a = 1;
}
@Override
public void show(){
System.out.println(this.a);
}
}楼主可以通过以上方式,实现返回父类,并且再通过父类找到子类的a变量。