Java 如何在派生的内部类中编写构造函数?

Java 如何在派生的内部类中编写构造函数?,java,generics,inheritance,Java,Generics,Inheritance,下面是与基类相关的代码DblyLinkList,DblyLinkList类的完整代码 注意:这是一个继承和封装练习您没有给contstructor an,那么默认情况下: Modifier Class Package Subclass World no modifier Y Y N N 这称为包私有,内部子类即使在同一个包中也无法访问此构造函数。这是因为它是一个内部类,所以即使子类可以访问super(),内部类

下面是与基类相关的代码
DblyLinkList
DblyLinkList
类的完整代码


注意:这是一个继承和封装练习

您没有给contstructor an,那么默认情况下:

Modifier    Class   Package     Subclass    World
no modifier     Y         Y            N        N
这称为包私有,内部子类即使在同一个包中也无法访问此构造函数。这是因为它是一个内部类,所以即使子类可以访问
super()
,内部类也不能

因此:


还请检查
Java

中有关访问级别的说明,您没有将其提供给contstructor an,默认情况下:

Modifier    Class   Package     Subclass    World
no modifier     Y         Y            N        N
这称为包私有,内部子类即使在同一个包中也无法访问此构造函数。这是因为它是一个内部类,所以即使子类可以访问
super()
,内部类也不能

因此:

请检查
Java

中有关访问级别的说明,尝试以下操作:

LockableNode(T item, DListNode<T> p,
            DListNode<T> n) {
        super(item, p, n);
        this.lock = false;
}
LockableNode(T项,DListNode p,
数据列表节点(n){
超级(项目,p,n);
this.lock=false;
}
试试这个:

LockableNode(T item, DListNode<T> p,
            DListNode<T> n) {
        super(item, p, n);
        this.lock = false;
}
LockableNode(T项,DListNode p,
数据列表节点(n){
超级(项目,p,n);
this.lock=false;
}

添加多少额外的代码行@RobbyCornelissen?因为您的解决方案本身不起作用……问题与访问修饰符无关。隐藏的是类型参数。@RobbyCornelissen首先确保
DblyLinkList
类的所有访问级别和设计都很好。我正在粘贴查询中的
DblyLinkList
类的链接。我已经在codereview上复习了
DblyLinkList
类。请问在@RobbyCornelissen添加了多少行额外的代码?因为您的解决方案本身不起作用……问题与访问修饰符无关。隐藏的是类型参数。@RobbyCornelissen首先确保
DblyLinkList
类的所有访问级别和设计都很好。我正在粘贴查询中的
DblyLinkList
类的链接。我已经在codereview.set上查看了
DblyLinkList
类:
class LockableNode扩展了DblyLinkList.DListNode{…
如果你能更具体地描述这个问题而不是“这不起作用”,那会有帮助。你的编译器/IDE报告是否提供了错误消息?运行时的行为不符合你的预期?@A4L正如你所说,我做了一些更改。它在起作用。为什么起作用?@overexchange问题是你的两个内部类都没有定义定义为
static
,这意味着它们只能存在于外部类的上下文中,因此为了引用此类类,您需要指定其全名,即包括父类的名称
DblyLinkList.DListNode
。但这没有多大意义,它们应该声明为
static
,因为您不需要想要并且需要创建一个外部类的instance以拥有一个节点实例。因此,您可以向内部类的声明中添加
static
,并像以前一样保持
扩展
。@A4L
static class DListNode
static class LockableNode
?我不明白。我该如何编写这样的代码
返回新的DListNode(item,prev,next);
返回新的LockableNode(item,prev,next);
?我认为实际原因/修复方法是尝试以下操作:
类LockableNode扩展DblyLinkList.DListNode{…
如果你能更具体地描述这个问题而不是“这不起作用”,那会有帮助。你的编译器/IDE报告是否提供了错误消息?运行时的行为不符合你的预期?@A4L正如你所说,我做了一些更改。它在起作用。为什么起作用?@overexchange问题是你的两个内部类都没有定义定义为
static
,这意味着它们只能存在于外部类的上下文中,因此为了引用此类类,您需要指定其全名,即包括父类的名称
DblyLinkList.DListNode
。但这没有多大意义,它们应该声明为
static
,因为您不需要想要并且需要创建一个外部类的instance以拥有一个节点实例。因此,您可以向内部类的声明中添加
static
,并像以前一样保持
扩展
。@A4L
static class DListNode
static class LockableNode
?我不明白。我该如何编写这样的代码
返回新的DListNode(项目,上一个,下一个);
返回新的LockableNode(项目,上一个,下一个);
?我认为实际原因/修复是
protected DListNode<T> newNode(T item, DListNode<T> prev, DListNode<T> next) {
    return new DListNode(item, prev, next);
}
Modifier    Class   Package     Subclass    World
public          Y         Y            Y        Y
protected       Y         Y            Y        N
LockableNode(T item, DListNode<T> p,
            DListNode<T> n) {
        super(item, p, n);
        this.lock = false;
}