import java.util.*;public class FindDups
{
public static void main(String[] args)
{
Set s = new HashSet(); for (int i = 0; i < args.length; i++)
{
if (!s.add(args[i]))
{
System.out.println("Duplicate detected:" + args[i]);
}
}
System.out.println(s.size() + " distinct words detected:" + s);
}
}
其中有一句Set s = new HashSet();
对此我有一个疑问,s到底是什么,是一个HashSet类的对象吗,貌似Set是一个接口吧,无法产生实例的
如果是HashSet类的实例,为什么不写成HashSet s = new HashSet();呢?
另外还有一个问题,为什么这么写居然会是合法的呢?编译器是如何处理这句话的?
解决方案 »
- 判断(数据库的)一个表是否为空 不为空则输出内容 为空则插入数据
- 关于keyListener中keyTyped方法的一些问题
- 用javamail做过发邮件功能的进来帮忙看看这个问题!!!
- 请问怎么读XML文件
- 谁有ava访问数据库后导出csv格式的文件
- 在构造方法时虚方法的调用出现错误!--为什么此时的school尚未赋值??
- 连接sqlserver时出现Microsoft][SQLServer 2000 Driver for JDBC]End of stream was detected on a read. 这种错误是什么原因,谢谢
- 那位同志帮忙翻译两个英语缩写——RSA、CMI,200分
- Can't get values via getParameter() method???
- 请教各位前辈!
- java 数据类型问题 求高人 帮忙
- 纯粹的新新手,请教一下。
Set s = new HashSet();
s虽然是声明为Set类型,但实际上是指向了HashSet()对象
这种实例化方法是java多态的一种表现!面向对象编程为了增加灵活性所以提出了面向接口或面向抽象编程!
上面得灵活性表现为,只要实现了接口Set的对象都可以赋值给s!
public show(){...}
}
class ChildA() implements Parent{
public show(){...}
}
class ChildB() implements Parent{
public show(){...}
}class Test(){
public print(Parent p){
//关键是这个方法,传入了一个Parent类型的对象
p.show();
} public static void main(String[] args){
Test t = new Test();
Parent a = new ChildA();
Parent b = new ChildB();
t.print(a); //这个时候a和b虽然是两个不同类ChildA和ChildB的对象,但是可以同时传入print中
t.print(b);
}
}
这个实子可能不是太好,不过也体现出了多态的一种用法
所以说Set是HashSet的父类
java的多态性就有这么一点 父类的引用可指向子类对象
即 Set s = new HashSet();
比如说有个Person类 他有两个子类 分别是Man和Women类
你可以说Man是person 也可以说Women是Person
所以用子类来实例化父类 就是将子类的对象赋值给父类的应用
这样做的好处是 你只要声明一个Person类的引用 就可以用来接收Women和Person类的对象 否则你要分别声明Women和Person的引用 在分别实例化
s虽然是声明为Set类型,但实际上是指向了HashSet()对象
也就是hashset是实现了set接口。
HashSet()返回一个实例化的Set接口对象。面向对象的多态性啊。楼主还是多看看书吧
我需要一只动物··首先需要的是一条狗··但是或许一下我就需要一只猫··所以我创建一个动物的对象··这个动物对象指向一条狗···也就是:Animal a=new Dog()..