`

内部类和static 内部类

阅读更多
Static Nested Class 和 Inner Class的不同。

Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

讲解:待续........
下面是内部类的搜索的
资料...
一、内部类自动拥有对其外围类的所有成员的访问权。

当某个外围类对象创建了一个内部类对象时,此内部类对象必定会秘密地捕获一个指向那个外围类对象的引用。然后,在你访问此外围了的成员时,就是用那个引用来选择外围类的成员。但是如果内部类是非static的,内部类的对象只能在与其外围类的对象相关联的情况下才会被创建。继承内部类的时候也需要其外围类的对象引用,否则继承无效。

二、.this和.new关键字

.this:在内部类中生成对其外围类的引用。一般可以使用外围类的名字后面紧跟圆点和this。

如果想告知某些其他对象,去创建某个内部类的对象,必须在new表达式中提供对其他外部类对象的引用,这就需要使用.new语法。例如:

Public class DotNew{}

       Public class Inner{}

}

Public static void main(String args[]){

       DotNew dn=new DotNew();

       DotNew.Inner dni=dn.new Inner();

       //dn.new DotNew.Inner(); 这是错误的

}//在拥有外部了对象之前是不可能创建内部类对象的(非Static内部类)



三、内部类可以向上转型(Upcasting)为其基类,或者接口。这时,内部类得到了对接口的引用,能够方便地隐藏实现细节。

四、内部类可以定义在方法和作用域中(需要慢慢地理解)

a)         可以定义在一个方法中

b)        可以定义在作用域中

c)         匿名内部类可以实现一个接口

d)        匿名类可以扩展有非默认构造器的类

e)         匿名类可以执行字段初始化

f)         匿名类可以通过实例初始化实现构造(匿名类不可能有构造器)

五、 嵌套类

如果不需要内部类对象与其外围类对象之间有联系,那么可以将内部类声明为static普通的内部类自动获取对外围类的引用,而嵌套类具有static的特性,不依赖外围类对象的建立,也没有指向外围类的对象。

1、  要创建嵌套类的对象,不需要外围类的对象;嵌套类中不可以使用this引用;

2、  不能从嵌套类的对象中访问非static的外围类对象;

3、  嵌套类有许多类似static的属性,因为嵌套类本身就是static的,嵌套类可以有static的数据和static字段,还可以包含static的嵌套类,而普通内部类是不可以的。

4、  嵌套类可以作为接口的一部分,而一般情况下,接口内是不允许有任何具体的代码的;

5、  嵌套类可以作为一些公共代码,使得他们可以被某个接口的所有不同实现所共用;

6、  可以使用嵌套类在每个类中都写一个Main()方法,来测试这个类。

7、  在多层嵌套类中,最深层的嵌套类可以透明底访问它所嵌入的外围类的所有成员

六、为什么需要内部类?

每个内部类都能独立地继承自一个(接口)的实现,所以无论外围类是否已经继承了某个(接口的)的实现,对于内部类都没有影响。

普通的类无法实现对抽象类和普通类的多重继承,而采用内部类可以实现,这在有时候是很有用的。内部类使得多重继承的解决方案变得更加完整。接口的实现解决了部分问题,而内部类有效地实现了“多重继承”,即:内部类可以继承非接口类型。

用内部类实现多个接口的意义:

1、  内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立;

2、  在当个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类;

3、  创建内部类对象的时刻并不依赖于外围类对象的创建;

4、  内部类并没有令人迷惑的“is-a”关系,它就是一个独立的类。
分享到:
评论

相关推荐

    深入浅析Java中Static Class及静态内部类和非静态内部类的不同

    这种类的声明前面带有`static`关键字,与普通的内部类(非静态内部类)有所不同,它们在使用和行为上存在显著的差异。 首先,让我们来探讨一下静态内部类与非静态内部类的主要区别: 1. **引用关系**: - 静态...

    Java4Android 35_内部类和匿名内部类

    在Java编程语言中,内部类和匿名内部类是两种特殊类型的类,它们为代码的组织和功能实现提供了独特的灵活性。本教程"Java4Android 35_内部类和匿名内部类"深入探讨了这两个概念,旨在帮助开发者更好地理解和运用它们...

    内部类分类及应用

    在使用匿名内部类时,要记住以下几个原则:匿名内部类不能有构造方法、匿名内部类不能是public、protected、private、static、只能创建匿名内部类的一个实例、匿名内部类不能定义任何静态成员、静态方法、一个匿名...

    Static修饰内部类

    彦舜原创,CSDN首发:希望对你有所帮助,仅此而已。内容工整规范,是作者本人,逐句敲出来,同时也含有个人的一些独见。

    Java 深入理解嵌套类和内部类

    Java 中的嵌套类和内部类是指在一个类的内部定义另一个类,这种类称为嵌套类(nested classes)。嵌套类有两种类型:静态嵌套类和非静态嵌套类。静态嵌套类使用很少,非静态嵌套类也即被称作为内部类(inner)。嵌套...

    内部类 匿名内部类 内部接口 对比说明

    3. **静态内部类(嵌套类)**:在类的任何方法之外,用static关键字定义。静态内部类可以直接访问外部类的静态成员,但不能直接访问实例成员,需要通过外部类的实例来访问。静态内部类可以在类外直接创建对象,不...

    java 内部类 局部内部类 匿名类 实例代码

    本篇文章将深入探讨Java中的四种内部类:实例内部类、局部内部类、匿名类和静态内部类,并通过实例代码进行详细解析。 1. **实例内部类**:这是最常见的内部类形式,它在外部类的实例方法或成员位置定义。实例内部...

    Java语法总结 - 内部类

    内部类可以分为四种:成员内部类、静态嵌套类、方法内部类和匿名内部类。 成员内部类 成员内部类是定义在外部类的成员变量中的一种内部类。它可以访问外部类的所有成员变量和方法,包括私有的变量和方法。成员内部...

    java内部类详解

    内部类主要分为四种类型:静态内部类、成员内部类、局部内部类和匿名内部类。 1. 静态内部类(Static Inner Class) 静态内部类与普通的类类似,只是它们定义在外部类中,并且前面带有 `static` 关键字。它们不会...

    内部类的分类及各自用法

    根据不同的应用场景和特性,内部类可以分为多种类型:成员内部类、局部内部类、静态内部类、匿名内部类。下面将详细介绍每种类型的内部类及其特点和使用方法。 #### 成员内部类 成员内部类(也称为非静态内部类)...

    静态内部类

    根据内部类是否声明为static,它们被分为非静态内部类(也称为成员内部类)和静态内部类。 #### 二、静态内部类的特点 静态内部类具有以下特点: 1. **独立性**:静态内部类与外部类之间没有依赖关系,即使外部类...

    内部类的相关知识-静态内部类,匿名内部类……

    2. **静态内部类**:使用 `static` 关键字修饰的成员内部类。 3. **局部内部类**:定义在方法或代码块中的内部类。 4. **匿名内部类**:没有名称的局部内部类。 #### 二、静态内部类详解 静态内部类是一种特殊的...

    Java内部类总结

    - **静态内部类**:也称为静态嵌套类,这种内部类通过`static`关键字修饰,不能直接访问外部类的实例成员,只能访问外部类的静态成员。 - **局部内部类**:是在一个方法或构造器内部定义的类,可以访问该方法或构造...

    JAVA内部类总结

    内部类分为四类:非静态成员内部类、静态成员内部类、局部内部类和匿名内部类。接下来将逐一介绍这四种类型的内部类。 #### 二、非静态成员内部类 非静态成员内部类是最常见的一种内部类形式,它具有以下特点: 1...

    java和kotlin的内部类静态嵌套类

    内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态嵌套类。其中,静态嵌套类是与外部类关联但不持有对外部类的引用,因此它可以像普通类一样被静态引用,而无需外部类实例。 Java的静态嵌套类通常用于...

    Java内部类总结,内部类的共同特征,内部类的分类等

    成员内部类不能含有 static 的变量和方法。 2. 局部内部类:即在一个方法中定义的内部类,局部内部类的作用域仅限于该方法内部。 3. 静态内部类:即使用 static 修饰的内部类,静态内部类可以独立于外部类的实例化。...

    java静态内部类(嵌套类)

    2. **不能访问外部类的非静态成员**:由于静态内部类与外部类的静态属性和方法处于相同的静态上下文中,因此静态内部类无法访问外部类的非静态成员变量或方法。 3. **命名空间独立**:静态内部类有自己的命名空间,...

    java 匿名内部类的使用规范

    本篇文章将深入探讨Java匿名内部类的使用规范,帮助你更好地理解和应用这一特性。 首先,理解匿名内部类的基本概念。匿名内部类没有名字,它不能被其他类直接引用,但可以作为局部变量、成员变量或者方法参数。它...

    第十章 内部类

    首先,内部类可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类就像是外部类的一个普通成员,可以在任何地方声明和使用。局部内部类则定义在方法或作用域内,它的生命周期仅限于该方法的...

Global site tag (gtag.js) - Google Analytics