java如何继承父类中的自引用结构?

Bo- 发布于 2014/07/27 16:18
阅读 688
收藏 0
如现有一个类Node表示二叉树的节点:
public class Node<T>{

	protected T data;  
	protected Node<T> parent,left,right;

...(各种方法)
}

想要写一个类R_BNode继承自Node,表示红黑二叉树节点,若只加入一个属性color和相应的方法,那么Node原有的parent、left、right、get方法、set方法等继承到R_BNode依然是Node类型;若不让R_BNode继承Node,又发现各个方法除了类型名"R_BNode"与"Node"之外没有任何差别。

请问遇到这种情况应该如何处理呢?

本人初学java,希望各位大神指点迷津!



加载中
0
捏造的信仰
捏造的信仰
可以用两个类型参数: class BRNode extends Node {...}
B
Bo-
回复 @捏造的信仰 : 额。。。什么意思。。。
捏造的信仰
捏造的信仰
你妹的,osc 处理回复有bug,等我在电脑上再回复一次。
0
Jerikc
Jerikc

类R_BNode继承自Node,那么R_BNode是Node类型的子类,所以你的担心是什么?你加一个color属性,然后定义它相应的set/get方法如下设置就好了。


B
Bo-
问题是,B_RNode继承自Node的方法比如getParent的返回值是Node不是B_RNode
0
calvary
calvary

java 用节点,树什么的.. 太吃力. 蹩脚..  没什么实际意义.

因为没有指针这个概念...  

小郭一号
小郭一号
回复 @Bo- : 纯属放屁,支持指针的语言一只左手就能数过来,其他几十种语言都“太吃力,蹩脚,没什么实际意义”?引用和指针的作用都搞不清楚还说什么不要为了学习而学习,你还是再学习学习吧。
B
Bo-
回复 @0-day : 受教了!那我就把数据结构和java分开学吧
calvary
calvary
回复 @Bo- : 不管学什么语言.重在解决实际面对的问题. 不要为了学习而学习.. 如果你只是要实现这种数据结构. 用c语言会更简洁明了..而且高效..
B
Bo-
那我应该怎么实现这样的数据结构呢?
0
XzhiF
XzhiF
复合优于继承 ,使用继承要慎重! 当然使用java 8 出了interface 有default 实现,另外考虑。
0
Grrrr
Grrrr

package node;

public class Node<T, E extends Node<T,E>>{
    protected T data; 
    protected E parent,left,right;
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
    public E getParent() {
        return parent;
    }
    public void setParent(E parent) {
        this.parent = parent;
    }
    public E getLeft() {
        return left;
    }
    public void setLeft(E left) {
        this.left = left;
    }
    public E getRight() {
        return right;
    }
    public void setRight(E right) {
        this.right = right;
    }
}

package node;

public class R_BNode<T> extends Node<T, R_BNode<T>>{
	private int color;

	public int getColor() {
		return color;
	}

	public void setColor(int color) {
		this.color = color;
	}
}



很丑

B
Bo-
这样也可以啊~长知识了!
0
小郭一号
小郭一号
parent、left、right这几个类型是可以运行时决定的,在R_BNode里面写类似left=new R_BNode()这样的代码,left的类型实际上就是R_BNode,不过使用时要做类型转换。
返回顶部
顶部