抽象类不是不能实例化吗? 右边是返回InputStream的 子类,这是典型的父类引用 指向 子类实例多态表现 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 子类可以赋值给任意它的父类或接口。这只是一个符号变化了,对象实例本身的类型是在 new 的时刻决定的,它一生不变。你看到变量是 InputStream 并不是表示它是 new InputStream() 得到的,而是类似这样:InputStream input = new FileInputStream("F:/a.txt"); 那这种情况该怎么判断呢?只要不是new出来的都可以这样操作吗? 对象实例可以赋值给它的真实类型的任意一个父类型或父接口。所以你只要知道它 具备 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 中 = 等号并不必然是一个定义对象分配内存的过程。只有碰到了 new 或字符串或基本类型的常量时才是。InputStream input = ... 并不表示我们在定义对象并分配内存,它可能仅仅是一个变量赋值。那这种情况该怎么判断呢?只要不是new出来的都可以这样操作吗? 抽象类不能实例化的意思是,你不能这么写:InputStream in = new InputStream();原来的写法(除了右边的括号里少写了参数以外)没有问题 关于抽象类实例化这个问题,以前在Java吧看到过,都是被误导了,你要记住一点,抽象类是绝对不能被实例化的! 你上面的那个例子实际是调用FileInputSteram实例化然后返回InputStream。 那这种情况该怎么判断呢?只要不是new出来的都可以这样操作吗?谢谢回答~ 你得到了 InputStream 就可以用了,你不用管别人是怎么返回一个 InputStream 给你的。这不是你的职责。 java菜鸟求指导,杨辉三角,数组越界问题 使用GridBagLayout??? 请教高手 字符比较的问题! 静态方法中可以包含非静态成员变量吗? 为什么我在事务中加了一个select语句就报错了呢?望指教 大数据量(String型的)如何在db2或者oracle中存取??最好是db2的例子!!! 代理服务器的原理是什么?如何用java实现? 我下栽了一个jdk1.3现在想来开发和数据库连接的问题,他有自己带的jdbc吗,支持什么数据库,高手指点拉? Socket服务器给客户端发消息 同步锁和互斥锁的区别 请问一个简单的关于二维数组的问题
InputStream input = new FileInputStream("F:/a.txt");
FileInputStream fis = (FileInputStream) input;
} 或者 boolean isFile = FileInputStream.class.isAssignFrom(input); 或者
String className = input.getClass().getName();
boolean isFile = className.equals("java.io.FileInputStream");
InputStream in = new InputStream();原来的写法(除了右边的括号里少写了参数以外)没有问题
谢谢回答~