日期:2014-05-20  浏览次数:20783 次

关于类、属性、对象、单向列表问题,新人求助,谢谢!祝大家新年快乐!
class Node{ // 定义节点类
private String data ; // 保存节点内容
private Node next ; // 表示保存下一个节点
public Node(String data){ // 通过构造设置节点内容
this.data = data ; // 设置内容
}
public void setNext(Node next){
this.next = next ; // 设置下一个节点
}
public Node getNext(){ // 取得下一个节点
return this.next ;
}
public String getData(){
return this.data ; // 取得节点的内容
}
};
public class LinkDemo01{
public static void main(String args[]){
Node root = new Node("火车头") ; // 定义根节点
Node n1 = new Node("车厢-A") ; // 定义第一个车厢(第一个节点)
Node n2 = new Node("车厢-B") ; // 定义第二个车厢(第二个节点)
Node n3 = new Node("车厢-C") ; // 定义第三个车厢(第三个节点)
root.setNext(n1) ; // 设置火车头的下一个节点是第一个车厢A
n1.setNext(n2) ; // 设置第一个车厢的下一个节点是第二个车厢
n2.setNext(n3) ; // 设置第二个车厢的下一个节点是第三个车厢
printNode(root) ; // 从头开始输出
}
public static void printNode(Node node){ // 输出节点
System.out.print(node.getData() + "\t") ; // 输出节点的内容
if(node.getNext()!=null){ // 判断此节点是否存在下一个节点
printNode(node.getNext()) ; // 向下继续输出
}
}
};
问题:
1、感觉自己对于类的理解还是不太深刻,这里面Node类中定义的next如果写成String next行不行?next不就是一个保存字符串的变量么。
2、很不理解类的定义,比如说这里的root、n1、n2都是Node类的对象,那么他们都具有什么属性?在Node类中声明了private String data ;private Node next ; 那么他们都具有这2个属性?
3、 Node root = new Node("火车头") ; // 定义根节点
Node n1 = new Node("车厢-A") ; // 定义第一个车厢(第一个节点)
Node n2 = new Node("车厢-B") ; // 定义第二个车厢(第二个节点)
Node n3 = new Node("车厢-C") ; // 定义第三个车厢(第三个节点)
root.setNext(n1) ; // 设置火车头的下一个节点是第一个车厢A
n1.setNext(n2) ; // 设置第一个车厢的下一个节点是第二个车厢
n2.setNext(n3) ; // 设置第二个车厢的下一个节点是第三个车厢
printNode(root) ;
这个地方依次把值存在next中,那么next的值不就会被之后的赋值覆盖了么,个人理解最后应该是“车厢-C”,为什么最后能依次输出呢?root.setNext(n1)这个调用方法也看不明白,setNext只是赋值给next,root调用它是干嘛呢?
新手提出的问题可能比较幼稚,感谢各位大虾:)祝大家新年快乐!

------解决方案--------------------
第一个问题 不行 因为next不是一个简单的字符串,而是一个node的对象
第二个问题 除了隐藏的一些属性和方法外,你定义哪些属性就有那些属性,对于你这个里面来说就那两个
第三个问题 那个next前边不是限定了是谁后边的么~ 也就是说根据前面的就能判断出next所指到底是哪一个
例如 root.setNext(n1) 表示把root这个节点的next设置为n1