Java 如何从派生类访问内部类构造函数?

Java 如何从派生类访问内部类构造函数?,java,constructor,Java,Constructor,对于海洋以下级别 我想从下面的Shark构造函数访问上面类中的构造函数生物 class Shark extends Ocean implements Behaviour { public Shark(int x, int y, int hungerLevel) { super(x,y); } } 如何从Shark类构造函数访问Criter类构造函数?只要Shark和Ocean在同一个包中,并且您将静态修饰符添加到Criter的类声明中,您就应该能够使用新的Oc

对于海洋以下级别

我想从下面的Shark构造函数访问上面类中的构造函数生物

class Shark extends Ocean implements Behaviour {

    public Shark(int x, int y, int hungerLevel) {
        super(x,y);
    }
}

如何从Shark类构造函数访问Criter类构造函数?

只要Shark和Ocean在同一个包中,并且您将静态修饰符添加到Criter的类声明中,您就应该能够使用新的Ocean访问Criter。Criter

看起来您应该扩展Criter而不是Ocean:

class Shark extends Ocean.Critter implements Behaviour{
...
    public Shark(int x, int y, int hungerLevel){
        super(x,y);

    }
...
}

为了让它工作,Critter需要是一个静态的内部类。我不知道这个设计有多少是你的,但是内部类应该被限制在相互依赖性很强的类中,这里不是这样。如果可以的话,把小动物带出海洋。

鲨鱼就是海洋?@ChrisMartin+1我的目的是扩展海洋。小动物,直到我看到下面的答案,我才知道它的正确名称是位置。小动物的正确名称是位置。我想不是。扩展类意味着是一种关系。若Shark类扩展了Position,则表示Shark是Position。但事实并非如此。它有一个position,所以你可以使用position类作为Shark的一个字段,但是如果你想让Shark扩展一些东西,正确的类是Critter@Boann如果你看到这个,设计就像你在Critter类中说的那样。但是基于toto2的评论,他们开始改变设计。是的,将生物声明为海洋中的静态成员更合理,并且不需要继承海洋。鲨鱼中的生物。但从语法的角度来看,如果我们将Ocean.Critter继承到Shark类,那么我在使用superx,y时会出错,这是为什么?+1表示Critter不应该是一个内部类。似乎作者可能会将类中的内部类与包中的类混淆。如果需要,如果Critter是一个非静态的内部类,则可以使用一个名为。例如,Shark类扩展了Ocean.Critter{SharkOcean Ocean,intx,inty{Ocean.superx,y;}}。如果我将Critter类重命名为Position,您认为将内部类位置继承给Shark有意义吗。为什么有人会认为内部类应该只限于外部类?为什么我要将位置类从海洋中取出来,当它相对放置在海洋中时?一个放置在海洋中的生物在海洋矩阵字段中有足够的表达。如果生物是海洋的一个内部类,它可以进入海洋的私人领域,这将导致一个高等级。
class Shark extends Ocean.Critter implements Behaviour{
...
    public Shark(int x, int y, int hungerLevel){
        super(x,y);

    }
...
}