我在声明抽象类的练习中遇到了以下代码:
import java.util.ArrayList;
public abstract class Box {
public abstract void add(Item item);
public void add(ArrayList<Item> items) {
for (Item item : items) {
Box.this.add(item);
}
}
public abstract boolean isInBox(Item item);
}
我无法理解 add(ArrayList<Item> item)
方法确实如此。我知道它通过一个 ArrayList
被称为项目,但什么是 Box.this.add(item)
你知道吗?有人能澄清一下吗?
2条答案
按热度按时间o0lyfsai1#
除了@ernest\u k在注解中所写的内容之外,还有一个实际的用例,您实际上需要用类名限定方法调用:如果您在访问外部类字段的方法中创建一个匿名内部类,就像下面的任意(在现实中非常无用)示例:
23c0lvtd2#
该类正在声明一个接口,该接口中已有一些代码。具体地说,它声明了一个没有详细实现的box,您可以稍后使用适合您需要的底层代码创建box。
例如,可以声明boxonset类,该类使用hashset实现该声明:
至于你的具体问题
add(ArrayList<>)
方法等效于collections addall()方法。它只是用抽象的add(Item)
以便在盒子里插入物品。您可以指定add( item )
,this.add( item )
甚至Box.this.add( item )
,在本例中,它们都指向同一个方法,它们只是进一步指定的方法。