java内部类构造,Java中的内部类构造

I've read about class fromal parameters and the question then arises as to why the following code is ill-formed?

class A:

package org.gradle;

public class A extends B.Inner{

public A(B s){

s.super(new B()); //error

s.super(); //OK

}

}

class B:

package org.gradle;

public class B{

public class Inner{

}

}

The key part of what was said is:

The constructor of a non-private inner member class implicitly

declares, as the first formal parameter, a variable representing the

immediately enclosing instance of the class

So, I expect that besides the default constructor, we should have a constructor with the following signature:

Inner(B b);

Why not?

解决方案

The "extra" parameter is effectively hidden from you - both when you declare it, and when you execute it. When you execute it, you provide a value in a different way - in your case, via s:

s.super();

That's passing s as the hidden extra argument to the B.Inner constructor. The syntax for all of this is a little weird - and I would personally try to avoid using inner classes in this sort of situation... they just get weird very quickly. I usually prefer static nested classes, and if I do need an inner class, it's almost always private. Subclassing an inner class declared in a different top-level class is an odd situation, IMO.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值