2 回答
TA贡献1851条经验 获得超5个赞
不需要用new是因为getScreenSize实例方法内部已经根据屏幕的尺寸new好了一个Dimension类的对象,只需要返回这个对象就行了。
前面已经提到了getScreenSize是一个实例方法,更准确地讲它是类Toolkit的一个实例方法,所以必须通过一个Toolkit类的对象才能调用这个方法。
而getDefaultToolkit是类Toolkit的一个静态方法(所以通过类名.方法名的形式调用),这个方法会返回一个类Toolkit的对象,再通过这个返回的对象就可以调用getScreenSize了。
所以,不能通过Toolkit.getScreenSize来调用getScreenSize方法,因为它不是静态方法需要通过一个类Toolkit的实例来调用,而静态方法getDefaultToolkit就可以返回一个类Toolkit的实例。
TA贡献1946条经验 获得超4个赞
首先,Dimension di=Toolkit.getDefaultToolkit().getScreenSize();这个引用方法是正确的引用方法。
你的疑问有三个.
第一,为什么可以不用new,因为在得到一个实体对象除了new外,也可以通过方法返回一个实体对象。在上面那条语句里就是getScreenSize()这个方法,至于getScreenSize()方法里是怎么创建Dimension 对象的,你不需要关心,这就是封装的一种。
第二,为什么Toolkit.getScreenSize();不能直接引用,因为这个方法不是静态方法
这个方法必须使用一个实体类去引用,而getDefaultToolkit()方法才是一个静态方法,他可以通过类名+方法名直接引用,作用就是返回一个Toolkit的实体类。
之后就可以用这个实体类去调用非静态方法了。分解一下代码你就能看明白了。
第三,为什么一个抽象类可以直接被引用。
抽象对象和接口是可以被引用和实例化的,只是不能通过new自己来进行实例化,首先这点要弄清楚。
抽象类和接口,可以通过方法,或者new他的非抽象子类来进行实例化,之后使用方法就和普通类是一样的了。
而调用静态方法只需要类名或者接口名就可以了,在java8里还增加了default关键字来定义默认方法体,接口也可以有自己的方法体了。
- 2 回答
- 0 关注
- 337 浏览
添加回答
举报