下午看李刚的疯狂java一书,里面有一段代码是Collection books = new HashSet();
books.add("第一本书");
books.add("第二本书");
books.add("第三本书");
后面省略了……
Collection books = new HashSet();这句是什么意思啊?Collection不是一个接口吗?为什么能创建了一个Collection对象?
另外,要创建也应该是HashSet books = new HashSet();或者Collection books = new Collection();啊?
但是我编译没有书上的语句没有错误,这是怎么回事啊?JavaCollectionHashSet
books.add("第一本书");
books.add("第二本书");
books.add("第三本书");
后面省略了……
Collection books = new HashSet();这句是什么意思啊?Collection不是一个接口吗?为什么能创建了一个Collection对象?
另外,要创建也应该是HashSet books = new HashSet();或者Collection books = new Collection();啊?
但是我编译没有书上的语句没有错误,这是怎么回事啊?JavaCollectionHashSet
Collection books = new HashSet();
HashSet实现了Collection接口,该代码创建了一个实现了Collection接口的
子类对象并将其引用赋值给booksHashSet是Collection接口的具体实现
父类引用是可以指向子类对象的!
楼主多看看基础!
Collection books = new HashSet();
HashSet实现了Collection接口,该代码创建了一个实现了Collection接口的
子类对象并将其引用赋值给booksHashSet是Collection接口的具体实现
父类引用是可以指向子类对象的!
楼主多看看基础!
我知道HashSet实现了Collection接口,那么直接HashSet books = new HashSet();不就创建一个实现Collection接口的对象了吗?
Collection books = new HashSet();
HashSet实现了Collection接口,该代码创建了一个实现了Collection接口的
子类对象并将其引用赋值给booksHashSet是Collection接口的具体实现
父类引用是可以指向子类对象的!
楼主多看看基础!
我知道HashSet实现了Collection接口,那么直接HashSet books = new HashSet();不就创建一个实现Collection接口的对象了吗?Collection books = new HashSet();
使用这种写法体现的是java的多态性,楼主可以查查。
Collection books = new HashSet();
HashSet实现了Collection接口,该代码创建了一个实现了Collection接口的
子类对象并将其引用赋值给booksHashSet是Collection接口的具体实现
父类引用是可以指向子类对象的!
楼主多看看基础!
我知道HashSet实现了Collection接口,那么直接HashSet books = new HashSet();不就创建一个实现Collection接口的对象了吗?Collection books = new HashSet();
使用这种写法体现的是java的多态性,楼主可以查查。
嗯,我知道这是多态,呃。
还有一个问题就是为什么 对象c不能使用ArrayList里的方法?这个c难道不是ArrayList的实例吗
Collection books = new HashSet();
HashSet实现了Collection接口,该代码创建了一个实现了Collection接口的
子类对象并将其引用赋值给booksHashSet是Collection接口的具体实现
父类引用是可以指向子类对象的!
楼主多看看基础!
我知道HashSet实现了Collection接口,那么直接HashSet books = new HashSet();不就创建一个实现Collection接口的对象了吗?Collection books = new HashSet();
使用这种写法体现的是java的多态性,楼主可以查查。
嗯,我知道这是多态,呃。
还有一个问题就是为什么 对象c不能使用ArrayList里的方法?这个c难道不是ArrayList的实例吗
哪有对象c? ArrayList的实例可以实现ArrayList的方法的
Collection books = new HashSet();
HashSet实现了Collection接口,该代码创建了一个实现了Collection接口的
子类对象并将其引用赋值给booksHashSet是Collection接口的具体实现
父类引用是可以指向子类对象的!
楼主多看看基础!
我知道HashSet实现了Collection接口,那么直接HashSet books = new HashSet();不就创建一个实现Collection接口的对象了吗?Collection books = new HashSet();
使用这种写法体现的是java的多态性,楼主可以查查。
嗯,我知道这是多态,呃。
还有一个问题就是为什么 对象c不能使用ArrayList里的方法?这个c难道不是ArrayList的实例吗
哪有对象c? ArrayList的实例可以实现ArrayList的方法的不好意思,说错了,我说的是Collection books = new HashSet();这句话,books不能使用HashSet类中的方法,这是怎么回事
Collection books = new HashSet();
HashSet实现了Collection接口,该代码创建了一个实现了Collection接口的
子类对象并将其引用赋值给booksHashSet是Collection接口的具体实现
父类引用是可以指向子类对象的!
楼主多看看基础!
我知道HashSet实现了Collection接口,那么直接HashSet books = new HashSet();不就创建一个实现Collection接口的对象了吗?Collection books = new HashSet();
使用这种写法体现的是java的多态性,楼主可以查查。
嗯,我知道这是多态,呃。
还有一个问题就是为什么 对象c不能使用ArrayList里的方法?这个c难道不是ArrayList的实例吗
哪有对象c? ArrayList的实例可以实现ArrayList的方法的不好意思,说错了,我说的是Collection books = new HashSet();这句话,books不能使用HashSet类中的方法,这是怎么回事因为books对象是Collection接口声明的。所以books对象只能用Collection里面声明的方法。-----------------------------------------------------------------------------------------------------------------
这样做的好处:
假设A和B是接口。A里面声明一个fun1方法,B里面声明一个fun2方法。
而AB类的设计实现了A接口和B接口。
那么A ab = new AB(); ab只能用A接口的fun1方法。
那么B ab= new AB(); ab只能用B接口的fun2方法。
这样更有助于大型的程序修改。只需改接口设计而不需要重新去改程序了。
----------------------------------------------------------------------------------------------------------------
你只要知道:对象只能实现声明它的对象类型里面的方法。
books只能实现Collection中实现的方法