加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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作为内部结构的事实.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读