代码就两行:
InetAddress address = InetAddress.getByName("www.yahoo.com");
System.out.println(address);
然后我去源码找InetAddress的toString怎么输出的,然后看到有一个getHostAddress()来输出IP地址,然而getHostAddress()本身是返回null的。
于是用IDE的调试器反复找了好久,得到一个线索:getHostAddress()在另一个类Inet4Address里是返回非空内容的。
然后水落石出,原来getByName()返回的是一个子类,接下来的事情都是这个子类内发生的了!
刚才的一个误区是,这种虽然不是构造器但起到构造器作用的方法常常有非常复杂的内容,返回值是什么要仔细分析。
能想到的事情有三个:
1 “是你太菜,把(多个)子类用父类统一到一起,避免跟具体子类打交道,让人看文档就够了,这在Java库里经常,现在知道了吧!”
2 “让你面向对象,傻眼了吧,类的继承跟重载、过载一样别扭,能不用就少用,Go大法好!”
3 “所以知道instanceOf为什么取消了吧。”