For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
类的加载与应用是需要程序员熟练掌握的一个编程开发技术,而今天我们就通过案例分析来了解一下,java编程开发类加载与应用方式分析。
一个类的定义在另一个类的定义内部,就是内部类。
内部类的使用可以很方便地隐藏实现细节。
注意:注意是要在另一个类的内部,如果是在外面就是一个普通的类,当然该类不能是public的,因为一个类文件只能有一个public类型的类;如果是内部类的话,则可以是public的。
内部类可以直接访问其外部类的方法和成员变量,包括private等所有的方法。(这是因为内部类对象在创建时会秘密捕获一个指向外部类的引用。)
内部类还是一个完整的类,跟其他类一模一样,有类的访问权限限制等。区别在于
一:内部类依赖于外部类,因此。内部类对其外部类是完全透明可见的,包括其private的私有成员变量,外部类也能访问。
二:要注意内部的定义的作用域,超出作用域则内部类不可用。
在方法和作用域内的内部类
内部类可以定义在任何地方,包括方法的参数,方法内部(不能用private修饰),方法的作用域内(局部内部类)。
匿名类不可能有构造器。(想要用的话可以用父类的带参构造器,父类不能是接口才行,必须是普通类或者抽象类)
匿名内部类可以有字段,方法,还能够对其字段执行初始化操作。
匿名内部类使用外部定义的对象或值时,编译器要求其参数引用是final类型的。如果是通过匿名内部类的父类构造器传递参数进来的话,则不需要是final类型的,因为这个参数并不会被匿名内部类直接使用。所以加final修饰是为了保证直接使用时该内部类的成员变量不可变?
匿名内部类与正规的继承区别:
匿名内部类既可以扩展类,也可以实现接口,但不能两者兼备。如是是实现接口,也只能实现一个接口。
嵌套类
把内部类声明为static类型的我们称为嵌套类,嵌套类不需要内部类对象与其外部类对象之间有联系。
创建嵌套类对象,不需要外部类的对象。
不能从嵌套类的对象中访问非静态的外部类对象。(因为嵌套类没有保存外部类对象的引用,不需要依赖外部类)
嵌套类与内部类的区别
普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static域,也不能包含嵌套类。但是嵌套类可以有static数据和static域,也能包含嵌套类。
嵌套类是内部类的一种,其编译后的class文件还是在外部类文件中。
在接口中写的内部类因为是接口里面的,自动是public和static的,所以接口中的内部类是嵌套类。我们可以在接口中放置内部类(嵌套类)代码。可以用于创建某些公共代码,使得他们可以被某个接口的所以不同实现所共用。
内部类无论嵌套了多少层的内部类,它都能透明地访问所以它嵌入的外部类的所有成员(即使是外部类的private成员、方法)。
为什么需要内部类
内部类实现一个接口与外部类实现这个接口的区别:
外部类实现一个接口不是总能享受到接口带来的方便,有时需要用到接口的实现。(比如外部类已经有同名的方法实现了,无法重复覆盖写出想要的覆盖方法)
这时候由内部类实现接口的优势:每个内部类都能独立地继承自一个(接口的)实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
内部类使得多重继承的解决方案变得完整:内部类允许继承多个非接口类型。(类或抽象类,因为每个内部类都可以去继承不同的类,这样这个外部类就有了多种继承的能力)
实现2个接口时我们可以选择使用单一类(多实现),或者使用内部类来实现。而如果实现的是2个抽象类或者具体的类,而不是接口,就只能使用内部类才能实现多重继承。
内部类使用前提:如果不需要解决多重继承的问题,那么自然还是用别的编程方式。
使用内部类可以获得的特性:
内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外部类对象的信息相互独立。
在单个外部类中,可以让多个内部类以不同的方式实现同一个接口,或继承同一个类。(实现不同的行为效果,有点策略模式的意思)
创建内部类对象的时刻并不依赖于外部类对象的创建。(通过static方法调用或者创建的是嵌套类?)
内部类并没有令人迷糊的"is-a"关系,他就是一个独立的实体。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。