すみません、疑問が深まってしまいました

1 Soket so=new Soket("so.jp",80);
2 InputStream is=so.getInputStream();
3 int i=is.read();

1で、スタック領域に、インスタンスsoを表すヒープ領域の参照アドレスを格納し
2で、InputStream型の変数isに割り当てられたヒープ領域に、インスタンスsoのgetInputStream()メソッドの結果であるストリュームを格納し
3で、変数iのヒープ領域に、read()メソッドの結果を格納する(どうして変数isがread()を呼びさせるのか疑問でした)
と考えていたのですが

[InputStream is」の記載で、InputStreamのインスタンス変数isを生成したということでしょうか?
newしなくてもインスタンスを生成してインスタンス変数に格納できるのでしょうか?