返回值类型是父类,怎么理解

xiening123 2017-05-30 01:24:12
测试: 如果一个方法的返回值类型是父类,那么能否返回一个子类对象.(该父类不管是类,抽象类还是接口)
返回值类型为什么能是父类
...全文
1162 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
galiniur0u 2017-05-31
  • 打赏
  • 举报
回复
楼主对继承的理解稍微有些小偏差,对于子类和父类如果具有相同的变量名,那么父子类之间的变量是相互隐藏的(这个跟函数不同,函数是覆盖,而变量不是),也就是说,父类只能找到父类的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变量。
  • 打赏
  • 举报
回复
应该是类型转换的问题吧.你传入的子类属于向上类型转换.这个没问题.但是你要返回的是父类型. 解决方法是:强制类型转换 或者 把类型在方法那里直接替换掉
ocean木子 2017-05-31
  • 打赏
  • 举报
回复
不写代码的钦 2017-05-30
  • 打赏
  • 举报
回复
return改成Zi
huhongzhao_8113 2017-05-30
  • 打赏
  • 举报
回复
返回值要的是父类 ,而你的子类是一个父类
uutopie 2017-05-30
  • 打赏
  • 举报
回复
你的test方法返回的是父类类型,打印出来当然是父类的变量。 如果你想返回子类对象,可以用强制转换 System.out.println( ((Zi) test(z)).a);
xiening123 2017-05-30
  • 打赏
  • 举报
回复
我传递进去的参数,不管父类还是子类, 返回的对象变量打印出来永远是父类的对象变量a =1 System.out.println(test(z).a); //打印出来的是子类的对象变量a 这一段写错了,实际打印出来的是父类的对象变量a, 但我传递进去的是子类的对象z
xiening123 2017-05-30
  • 打赏
  • 举报
回复
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(); System.out.println(test(z).a); //打印出来的是子类的对象变量a } public static Fu test(Zi zi){ return zi; } }

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧