I am trying to create a class say MyStack that would implement a java.util.collections class. MyStack will override some methods of the collections cl
Is defining a stack what you really want to achieve? If so, then go ahead and define it without even implementing Collection interface - it will be OK for simple cases. Or use an existing class - java.util.Stack.
When we implement Collection along with we must implement Iterator<E> also. Which is use to iterate over the item on which you want.
Make sure to throw on a <E> specification on your class as well:
public class MyStak<E> implements java.util.Collection<E>
^^^
If you want to make life easier on yourself try sub-classing AbstractCollection instead of implementing Collection directly. It provides reasonable default implementations for most of the methods to minimize the amount of code you need to write.
java.util
Class AbstractCollection<E>
This class provides a skeletal implementation of the
Collectioninterface, to minimize the effort required to implement this interface.To implement an unmodifiable collection, the programmer needs only to extend this class and provide implementations for the
iteratorandsizemethods. (The iterator returned by theiteratormethod must implementhasNextandnext.)To implement a modifiable collection, the programmer must additionally override this class's
addmethod (which otherwise throws anUnsupportedOperationException), and the iterator returned by theiteratormethod must additionally implement itsremovemethod.The programmer should generally provide a
void(no argument) andCollectionconstructor, as per the recommendation in theCollectioninterface specification.
And one recommendation, if you plan to implement your own collection interface consider extending corresponding abstract class, but not implementing interface itself, cause abstract classes implement methods general to the interface. Look at: AbstractCollection, AbstractSet, AbstractList
You were VERY close!
You just need to define E in your subclass as well:
public class MyStak<E> implements java.util.Collection<E>
The idea is that you could have a subclass with, say, <E, F, G>, and you implement two different interfaces, one using E, one using F. That, or MyStak could be specialized and use a specific class for Collection, instead of a generic E.
Instead of:
public class MyStak implements java.util.Collection<E>{
try:
public class MyStak<E> implements java.util.Collection<E>{