Vertex,Word,Person

Vertex是抽象类

Word 和 Person继承于他,在组成相应的边时(WordEdge,SocialEdge),到底用Vertex的实例化来做还是直接用Word,Person的实例化。

举例:

Vertex A = new PersonVertexFactory().createVertex("A", args2);

还是Person A = new PersonVertexFactory().createVertex("A", args2);

结论:用第一种, 因为我们抽象出来的Vertex,Edge,Graph类,那些子类只是他们的不同实现,我们的目的是得到一个点,一个边,一个图。而且,如果用子类来生成边,会导致抽象类中的一些方法无法使用,如,Set<Vertex> vertices()因为返回值类型不同

addVertices(List<Vertex> vertices),传参类型不同,会引起麻烦,当然,也可以用泛型修改抽象类的方法,

Set<? extends Vertex> vertices(),addVertices(List<? extends Vertex> vertices)。但这增加了代码维护的工作量,至少在这个实验中是不合适的。


最重要的问题,有些方法,譬如toString,equals在不同子类中有不同的Override方法,那我都用Vertex来修饰,会不会导致调动父类中的方法。

测试如下:

Vertex A = new PersonVertexFactory().createVertex("A", args2);

Vertex W = new WordVertexFactory().createVertex("A", null);

直接比较这两个实例的类型是否相同,

assertEquals(A.getClass(),W.getClass());

测试结果:

java.lang.AssertionError: expected:<class vertex.Person> but was:<class vertex.Word>

得出结论,他们仍然是他们的子类型,当然也会调用各自重载的方法。

        System.out.println(A.toString());

        System.out.println(W.toString());

运行结果:

<"A", "Person", <"F", "21">>

<"A", "Word">


   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值