【发布时间】:2020-02-28 18:45:01
【问题描述】:
这些天我正在使用 CS61b。我在访问控制的讲座上卡住了。我在变量 first 和类 IntNode 上的“private”关键字无法正常工作。
在 Google 上搜索但一无所获。
public class SLList {
private IntNode first;
/**
* If the nested class never uses any instance variables or methods of the outer
* class, declare it static.
*/
private static class IntNode {
public IntNode next;
public int item;
public IntNode(int i, IntNode n) {
next = n;
item = i;
}
}
public SLList(int x) {
first = new IntNode(x, null);
}
public void addFirst(int x) {
first = new IntNode(x, first);
}
public int getFirst() {
return first.item;
}
/** ----------------SIZE---------------------- */
private int size(IntNode L) {
if (L.next == null) {
return 1;
}
return 1 + size(L.next);
}
public int size() {
return size(first);
}
/**-------------------SIZE------------------- */
/**---------------add LAST ------------------*/
/** how to solve null pointer expectation? */
public void addLast(int x) {
IntNode p=first;
while(p.next!=null){
p=p.next;
}
p.next=new IntNode(x, null);
}
/**---------------add LAST ------------------*/
public static void main(String[] args) {
SLList L = new SLList(5);
L.addFirst(10);
L.addFirst(15);
System.out.println(L.getFirst());
System.out.println(L.size());
L.addLast(20);
L.first.next.next = L.first.next; /** <----- I can still get√ access to first. */
}
}
我预计会有错误:首先在 SLList 中有私有类, 但我没有错。
【问题讨论】:
-
为什么不能访问同一个类中的私有字段?您是否希望其类不使用私有字段?如果它自己的类无法访问它,那么谁应该能够使用它?
-
如果您将
main方法移动到另一个类(就像在任何实际应用程序中一样),您确实会得到预期的错误。 -
这个线程可能有助于理解。 stackoverflow.com/questions/4707504/…
标签: java data-structures