`

内部类和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”关系,它就是一个独立的类。
分享到:
评论

相关推荐

    Static修饰内部类

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

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

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

    静态内部类(Static Inner Classes)1---马克-to-win java视频

    静态内部类 Static Inner 马克-to-win java视频的详细介绍

    Java内部类

    内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default)。

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

    上次有朋友问我,java中的类可以是static吗?我给他肯定的回答是可以的,在java中我们可以有静态实例变量、静态方法、静态块。当然类也可以是静态的,下面小编整理了些关于java中的static class相关资料分享在脚本之...

    java语言内部类总结

    定义在一个类内部的类叫内部类,包含内部类的类...内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。

    java内部类的使用

    内部类的定义和普通类的定义没什么区别,它可以直接访问和引用它的外部类的所有变量和方法(包括private),就像外部类中的其他非static成员的功能一样。区别是,外部类只能声明为public和default,而内部类可以声明...

    static final 包 权限修饰符 内部类 的脑图

    static final 包 权限修饰符 内部类 的思维导图

    Java的内部类和匿名类剖析

     如果内部类没有指定static修饰符,拥有对外部类的所有成员的完全访问权限,包括实例字段和方法。为实现这一行为,非静态内部类存储着对外部类的实例的一个隐式引用。所以,对一个非静态内部类进行实例化需要采用...

    JAVA常用类与内部类

    2、静态内部类:定义在类中的类,class 关键字前加入 static 修饰符,创建静态内部类对象不需要外部类对象。 3、局部内部类:定义在方法中的类,作用范围只在当前方法中。 4、匿名内部类:特殊的局部内部类,没有...

    day11_static、内部类、权限、参数传递、复习.pdf

    day11_static、内部类、权限、参数传递、复习.pdf

    内部类与反射机制详解

    这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields...

    静态(static)方法重写(override)

    静态(static)方法重写(override)

    Static和Final修饰类属性变量及初始化

    1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用.

    java中的内部类内部接口详解

    一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因,java并不介意在一个文件中写多个类和多个接口,这就有了我们今天要讲的内部类和内部接口。...

    static关键字有何魔法?竟让Spring Boot搞出那么多静态内部类(推荐)

    主要介绍了static关键字有何魔法?竟让Spring Boot搞出那么多静态内部类,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    Java零基础-static关键字.md

    建议通过阅读相关的Java教材或搜索资料,进一步扩展学习与static关键字相关的高级主题,如静态代码块、静态内部类和静态导入等内容。 如有疑问,可以参考Java官方文档或向技术论坛寻求帮助,进一步加深对static...

    static 用法

    C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数. 这是与普通成员函数的最大区别, 也是其应用所在, 比如在对某一个类的对象进行计数时, 计数生成...

    13_Java面向对象_第5天(static、final、匿名对象、内部类、包、修饰符、代码块)_讲义

    13_Java面向对象_第5天(static、final、匿名对象、内部类、包、修饰符、代码块)_讲义

    Java static关键字解析

    Java static关键字解析静态内部类(默认指外部类的内部类)静态方法静态变量静态语句块 范围:只围绕外部类进行讨论,例如内部类的内部类这种多层套娃式的暂不进行讨论 jdk版本: jdk8 静态内部类(默认指外部类的...

Global site tag (gtag.js) - Google Analytics