关于java的内部类的问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 15:29:58
1.实例内部类可不可以有静态的方法,如果可以能用类名+。直接访问吗
2.实例内部类的静态成员,其他类可以同类名+。直接访问吗
class A{
class B{
static int a = 6;
}
}
class C{int c = A.B.a}可以吗
3.当内部类涉及到继承问题的时候,继承内部类的构造方法,是不是的提供内部类(最近一层)外部类的引用
4.同一个匿名类只能在当前类中使用吗?匿名类是不是非的和当前类有所关系?如果创建匿名类的引用,该引用的类型是什么
5.能不能举个匿名类实现接口的例子?(匿名类是不是一次只能实现一个接口)

1/2.这个有一个访问权限问题,内部类可以包装类的范围内访问,当然也可以通过类名来访问public静态变量,注意,在类是public的时候,其他外部类也可以用过A.B.a这样来访问这个内嵌类的变量,至于不是public的时候,内部类和类的数据成员的访问权限一样

3.关于内部类的继承问题,情况比较复杂,我的建议是,不要玩内部类继承了,很多时候连逻辑意义都解释不清楚,以下是一些例子

由于内部类构建器必须同封装类对象的一个句柄联系到一起,所以从一个内部类继承的时候,情况会稍微变得有些复杂。这儿的问题是封装类的“秘密”句柄必须获得初始化,而且在衍生类中不再有一个默认的对象可以连接。解决这个问题的办法是采用一种特殊的语法,明确建立这种关联:

//: InheritInner.java
// Inheriting an inner class

class WithInner {
class Inner {}
}

public class InheritInner
extends WithInner.Inner {
//! InheritInner() {} // 编译错误
InheritInner(WithInner wi) {
wi.super();
}
public static void main(String[] args) {
WithInner wi = new WithInner();
InheritInner ii = new InheritInner(wi);
}
} ///:~

从中可以看到,InheritInner只对内部类进行了扩展,没有扩展外部类。但在需要创建一个构建器的时候,默认对象已经没有意义,我们不能只是传递封装对象的一个句柄。此外,必须在构建器中采用下述语法:
enclosingClassHandle.super();
它提供了必要的句柄,以便程序正确编译。

4是的,匿名类只能在该类引用。