java继承与组合(实现堆栈)
发布时间:2020-12-15 04:51:14 所属栏目:Java 来源:网络整理
导读:我想在 java中实现一个Stack(使用list interface: Interface List). 我想以两种不同的方式实现它:使用组合和继承. 对于继承,到目前为止我有: import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIter
我想在
java中实现一个Stack(使用list interface:
Interface List).
我想以两种不同的方式实现它:使用组合和继承. 对于继承,到目前为止我有: import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public class StackInheritance implements List { //implement list methods } 对于作文,我有: import java.util.List; public abstract class StackComposition implements List { // implement some standard methods } public class StackViaList extends StackComposition { // implement methods that have not been implemented in the abstract // class } 我很困惑从哪里开始.我之前从未使用过接口,所以我是否应该使用List方法来“模仿”堆栈,例如使用Array或ArrayList? 另外,对于合成,我不明白应该在StackComposition中使用哪些方法以及应该在StackViaList中使用什么方法.在不完全理解接口以及继承和组合之间,我有点迷失.我似乎还不能“得到它”…… 任何帮助将不胜感激,谢谢! 解决方法
对于组合,堆栈类应该有一个列表,而不是实现或扩展基于List的类.继承是一种“IS A”关系,而组合是“HAS A”关系.
例如: public class StackWithComposition { // StackWithComposition HAS A List (rather than IS A List) private List myList = new ArrayList(); public void push(object item) { // add item to myList,etc. } public object pop() { // return item at top (or end) of myList } // etc. } 请注意,您可能希望将其设置为泛型类,而不是处理原始对象,但这可能是个主意. 在这种情况下,基于组合的解决方案可能优于基于继承的解决方案.当你从类/接口继承时,你应该问自己,Stack是List吗?大多数Stacks不应该为用户提供对所有原始List方法的访问权限,因此最好隐藏您正在使用List作为内部数据结构的面.使用组合列表可以完全隐藏您使用List作为内部结构的事实. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |