Icon bug = new ImageIcon( getClass().getResource( "bug1.png" ) );
ImageIcon bug = new ImageIcon( getClass().getResource( "bug1.png" ) );
这两者有什么区别?我的书总是使用第一行的方式声明一个
ImageIcon
,但是用第二种方式声明不是更好吗?因为它更具体地是一个ImageIcon
。Icon
是一个接口,而 ImageIcon
是该接口的一种实现。
使用 Icon
更好,因为这意味着您可以将 ImageIcon
更改为其他 Icon
实现,而无需更改应用程序的其余部分。
您应该先阅读一下JavaDocs的 ImageIcon
部分。
您会注意到,ImageIcon
实现了 Icon
接口,这意味着它可以在任何期望 Icon
的地方使用(例如 JButton
和 JLabel
),但是它还提供了获取 Image
实例的方法,使您可以使用 Graphics
进行绘制,而无需 Component
引用,Icon
需要此引用。
这两个很相似,但第一个是最好的,因为ImageIcon是Icon,但反过来不一定成立。当我说ImageIcon是Icon时,ImageIcon实现了Icon。
Icon
类中的方法 - 也就是说,这个Icon
恰好是一个ImageIcon
对于代码来说是无关紧要的。这是可维护性的福音。这也意味着您可以将重构成更广泛有用的方法 - 其中您传递一个Icon
而不是一个ImageIcon
。 - Dawood ibn KareemIcon
是一个接口;ImageIcon
是实现该接口的类。下面是另一个SO问题,讨论了为什么要声明变量具有接口类型而不是具体类型的问题:https://dev59.com/9m865IYBdhLWcg3wivCi - ajb