首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >图论程序

图论程序
EN

Stack Overflow用户
提问于 2013-11-21 15:58:29
回答 3查看 328关注 0票数 2

所以现在我在学习图论。我觉得为它制作一个程序会很酷。要创建不同的图,添加和删除节点、边和所有类似的排序。

这学期我没有编程课,所以我试着准备下学期他们重新开始的时候。

到目前为止,我有一个叫做图论(驱动/命令行)的类,它当然运行整个程序。

除了驱动类之外,我拥有的主要类是:--图:类型:路径、循环、完整.

因为它们都有节点和边的列表以及相同的添加/删除方法,所以我从图中继承了这些类型,比如路径和循环,所以我不必为每一个方法重新创建这100万个方法。

在driver类中,我有一个所有创建的图的列表。

代码语言:javascript
运行
复制
ArrayList<Graph> graphs = new ArrayList<Graph>();

我的问题是,当我开始处理部分图类时,它和其他类一样继承了图,但是我无法访问这些方法。

当我创建一个部份时,我是驱动者:

代码语言:javascript
运行
复制
Partite p = new Partite(blah, blah);
graphs.add(p);

当我从列表中得到这张图时,我无法访问有方的方法。我该怎么做呢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-21 16:01:05

因为当您从graphs获得元素时,它们将是Graph类型的引用。

要从Partite访问方法,必须向Partite添加强制转换。

代码语言:javascript
运行
复制
Partite p = new Partite(blah, blah);
graphs.add(p);
Partite other = (Partite)graphs.get(0);
other.methodFromPartite();

好了。

票数 2
EN

Stack Overflow用户

发布于 2013-11-21 16:02:22

基本解

如果您依赖于特定的Partite方法(相对于PartiteGraph方法的版本),您不应该将它保存在Graph的数组中,但是如果必须的话,您可以进行强制转换。

代码语言:javascript
运行
复制
Graph g=graphs.get(i);
Partite p=(Partite)g;

请注意,如果您弄错了(尝试转换一些不是Partite的东西),您将得到一个异常。可以预先检查转换是否可以通过使用

代码语言:javascript
运行
复制
if (g instanceof Partite){
   .....
}

更好的概念

但正如我所说,所有这些通常都是糟糕的程序设计的标志。更好的设计是只在读取此列表时触发一般的图形行为(Partite仍在列表中,但它们将以Graphs的形式运行),并为它们需要的任何不同行为保留一个单独的Partite列表。

一个更好的概念

如果您可以以这样的方式组织您的程序,您只需要从Graph调用方法,但是Parties会覆盖其中的一些方法,这样它的行为方式就是理想的解决方案。

例如,Graph有update和Partites‘重写update来完成它所需要的额外工作。所以

代码语言:javascript
运行
复制
public class Graph {


    public void update(){
        doImportantWork();
    }

}

public class Partite extends Graph{

    @Override
    public void update() {
        super.update(); //so that the basic graph behavior happens
        doPartiteSpecificImportantWork();
    }

}

然而,这并不总是切合实际的。

票数 1
EN

Stack Overflow用户

发布于 2013-11-21 16:02:55

这可能是因为您试图使用对它的图引用来修改您的分部对象。如果您想使用父类引用调用特定于子类的方法,那么您的设计可能需要一些修改(--这是一个代码嗅觉)。为了暂时绕过它,现在您可以将您的图引用转换为一个部分引用。

代码语言:javascript
运行
复制
((Partite)graphRef).[some method on partite]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20125775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档