Java `尝试访问子类的属性时找不到符号“”,但变量的类型为超类

Java `尝试访问子类的属性时找不到符号“”,但变量的类型为超类,java,android,polymorphism,Java,Android,Polymorphism,Java noob在这里,我有一个类型为OutputStream的变量,稍后在函数中,我有一个条件,将OutputStream分配给FileOutputStream或ByteArrayOutputStream的新实例,但是每当我尝试访问属于任何子类的任何属性时。我收到一个错误,找不到符号。 有没有办法保持同一父类的变量,并尝试告诉运行时,每当我需要访问该属性时,它将是子类类型的 下面是一些伪代码 public void work(Map params) { OutputStream output

Java noob在这里,我有一个类型为OutputStream的变量,稍后在函数中,我有一个条件,将OutputStream分配给FileOutputStream或ByteArrayOutputStream的新实例,但是每当我尝试访问属于任何子类的任何属性时。我收到一个
错误,找不到符号
。 有没有办法保持同一父类的变量,并尝试告诉运行时,每当我需要访问该属性时,它将是子类类型的

下面是一些伪代码

public void work(Map params)
{
OutputStream output = null;


if(params.isAFile)
{
  output = new FileOutputStream();
}
else
{
  output = new ByteArrayOutputStream();
}

...do some work that makes use of the OutputStreams class
if(isFile)
{
  return output
}
else
{
  mybuffer = output.buf; //it fails here with Cannot find symbol since output is of type OutputStream when it should be treated as type ByteArrayOutputStream
  return myBuffer;
}

}

你必须这样施展:

(ByteArrayOutputStream output).buf

Java不知道它可以安全地调用ByteArrayOutputStream中的方法,因为OutputStream没有该方法

你必须这样施展:

(ByteArrayOutputStream output).buf

Java不知道它可以安全地调用ByteArrayOutputStream中的方法,因为OutputStream没有该方法

那只是我写的伪代码,可以给你一点上下文,请不要太详细。那只是我写的伪代码,可以给你一点上下文,请不要在这方面花费太多的细节。太棒了,谢谢你,我知道有些地方需要一些类型转换,所以这看起来是正确的,我只是对Java不太熟悉。编译器将其视为lambda表达式,并告诉我使用更高版本进行编译。太棒了,谢谢你,我知道某个地方需要一些类型转换,所以这看起来是正确的,我只是对Java不太熟悉。编译器将其视为lambda表达式,并告诉我使用更高版本进行编译。