java 内部类实例化的一些疑惑
关注:225 答案:2 mip版
解决时间 2021-01-14 22:35
提问者笑低了眉眼
2021-01-13 23:57
请看代码 这是一个用内部类写链表:
class Linklist
{
public class Node
{
private String data;
private Node next;
public Node(String d){data=d;}
public void add(Node newNode)
{if(this.next==null)
{this.next=newNode;}
else
{this.next.add(newNode);}
}
public void printNode()
{System.out.print(this.data+"\t");
if(this.next!=null)
{this.next.printNode();}
}
};
private Node root;
public void addNode(String str)
{
Node n=new Node(str);
if(root==null)
{root=n;}
else
{
root.add(n);
}
}
public void printLink()
{
if(this.root!=null)
{
this.root.printNode();
}
}
};
public class LinklistDemo1
{
public static void main(String args[])
{Linklist L=new Linklist();
L.addNode("1");
L.addNode("2");
L.addNode("3");
L.addNode("4");
L.addNode("5");
L.addNode("6");
L.printLink();
}
}
这段代码没有问题 可以增加并打印出链表。我的疑惑是,在main()中Linklist L=new Linklist();实例化的时候,外部类的数据成员private Node root 会被实例化,但是这里我并没有写内部类Node的不带参数(我只写了带一个参数的)的构造函数,那么这里可以不报错?
最佳答案
二级知识专家橙池未蓝
2021-01-14 01:19
你好:
1. 首先 private Node root 当你没有显示初始化的时候它的值是Null.
2. 他不报空指针异常的原因是在public void addNode(String str) 这个方法中,你有一个判断
if(root==null)
{root=n;}
这样的话会给它赋一个初始值,它不在是null了,所以程序可以不报错的执行
希望可以帮到你
全部回答
1楼月洸芐啲溫拵
2021-01-14 01:35
必须要有这个方法,因为内部类是不允许其他类直接访问的,必须要有一个包装类的引用来指向这个内部类,此例中car就是包装类,对于car.super()就是为了确保有一个car的对象实例指向wheel.此处不能调用wheel的构造方法,这是java的硬性规定
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
→点此我要举报以上信息!←
推荐资讯
大家都在看