Другие ответы довольно много прибивали его, но я хотел бы добавить следующий бит.
Если тип ссылочной переменной is
является строго внутренней конструкцией вашего класса, т.е.ни один другой класс никогда не узнает об этом, прямо или косвенно, тогда нет никакой разницы между этими двумя утверждениями, хотя я бы запрограммировал более базовый тип (InputStream) только потому, что.
Однако, если есть хоть малейший намек на утечку специфического поведения FileInputStream через интерфейс вашего класса, не имея при этом существенного значения для проблемы, которую вы пытаетесь решить, вы всегда должны программировать более базовый тип.
Конечно, это общепринятая практика и относится к большему, чем InputStreams и тому подобное.
FileInputStream получен из InputStream - любой экземпляр FileInputStream обязательно является InputStream. Широкое предпочтение делает объявления максимально абстрактными. – user888379
Нет разницы, поскольку вы оба делаете оба в обоих случаях. – EJP
Возможный дубликат [Java - объявление из типа интерфейса вместо класса] (http://stackoverflow.com/questions/3383726/java-declaring-from-interface-type-instead-of-class) – Tom