抽象类不是不能实例化吗?解决方法

抽象类不是不能实例化吗?
InputStream in = this.getClass().getClassLoader().getResourceAsStream();
这个式子合法吗?右边看了下是返回类型是InputStream,但是InputStream是抽象类啊,这样赋值给in可以吗?求大神解答~
------解决思路----------------------
对象实例可以赋值给它的真实类型的任意一个父类型或父接口。

所以你只要知道它 具备 InputStream 的功能就可以了,这是面向对象的程序设计,关注功能,忽略不必要的细节。

如果你确实想知道这个 InputStream 是不是 FileInputStream 可以:

   if (input instanceof FileInputStream) {
         FileInputStream fis = (FileInputStream) input;
   }

  或者 boolean isFile = FileInputStream.class.isAssignFrom(input);

  或者
   String className = input.getClass().getName();
   boolean isFile = className.equals("java.io.FileInputStream");


------解决思路----------------------
关于抽象类实例化这个问题,以前在Java吧看到过,都是被误导了,你要记住一点,抽象类是绝对不能被实例化的! 你上面的那个例子实际是调用FileInputSteram实例化然后返回InputStream。