内部类的分类:静态内部类,成员内部类,局部内部类,匿名内部类。
注意:
1,一个内部类的对象能够访问创建它的外部类对象的所有属性及方法(包括私有部分)。
//可以闭上眼镜,把这个内部类等同于一个类的一个方法,当然就可以访问这个外部类的
//所有方法和属性,私有方法和属性是属于外部类的,当然也就等同于内部类的.
2,对于同一个包中的其它类来说,内部类能够隐藏起来。(将内部类用private修饰即可)
//只有在内部类中,才能定义一个为private类型的class,因为这时编译器已经把这个类看作这个类的成员了,但是在一般使用时,就是所谓的”顶级类时”,不能使用private,只能是public 或者是friendly.如果要是想保证一个类不产生任何的对象,请在构造函数中,把构造函数声明成private.
3,内部类可定义在方法中,称为局部内部类,局部内部类所有的操作必须在方法的内部,。但它只能使用方法中的final常量。局部内部类一般是实现接口或者是继承父类。
//定义在一个方法内的类,又被成为局部内部类,这个类只能使用在方法中的final常量,注意,这个常量是在一个方法中的,那么能否使用一个类中的常量呢?当然是可以的,因为类中的常量在在一个方法中是可见的.(定义在方法体中的内部类,只能访问方法中定义的被声明为final的局部变量.原因:定义在方法体中的变量会随着方法的退出而消亡,通过定义其为final变量,可以扩展其生命期,可与访问其类实例的生命期配合,因为类实例的生命期不同于方法和其所属变量,是由系统自动控制回收时机,但对类属性的访问并没有严格的限制。)
4,内部类可以被定义为抽象类
// abstract 类同样可以在内部类中
5,非静态内部类不能声明本类的static成员, 成员内部类实例化的时候必须先实例化他的外围类才能实例化成员内部类。
//只有一个静态的内部类,才可以声明一个static成员,,静态内部类可以访问外围类的静态方法、成员(包括private static的成员).静态内部类实例化的时候不必先实例化外围类,可以直接实例化内部类。
class A{
static class B{
//如果这里不是一个static类,是不可以被声明这个gg方法的.
static void gg(){ int a = 100;
System.out.println(a);}}}
6,匿名内部类
在某些情况下,我们只需要内部类的一个对象,那么我们就没有必要给内部类命名,没有名字,没有构造函数的内部类我们称为匿名内部类
若试图定义一个匿名内部类,并想使用在匿名内部类外部定义的一个对象(指的是外围类以外的参数,不包括外围类),则编译器要求外部对象为final属性。
内部类特点(转)
1.静态类有各种控制访部级别:private,public,protected,packed
2.类的类成员默认访问控制符是package,而方法变量的默认访问控制符是private,并且不能加访问控制符。
外部类只能有两种访问修饰符:public 或默认为package
3.内部类可以为任何一种修饰符,其实内部类作为其外部类的一个成员,其访问修饰符决定了它是否可以在外部类对象中的可见度,其默认为package
4.建立内部类对象:
outerObject=new outerClass(Constructor Parameters);
outerClass.innerClass innerObject=outerObject.new InnerClass(Constructor Parameters);
5.内部类不可脱离其外部类的限制使用,必须outerClass.innerClass innerObject如此使用。
6.Java编译器在创建内部类对象时,隐式的把其外部类对象的引用也传了进去并一直保存着。这样就使得内部类对象始终可以访问其外部类对象,同时这也是为什么在外部类作用范围之外向要创建内部类对象必须先创建其外部类对象的原因。
内部类对象可以访问外部类的任意变量或方法(包括private变量或方法)
7.内部类的同名成员变量被屏蔽了,怎么办?没事,Java里用如下格式表达外部类的引用:
outerClass.this
8.和非静态内部类相比,区别就在于静态内部类没有了指向外部的引用
除此之外,在任何非静态内部类中,都不能有静态数据,静态方法或者又一个静态内部类(内部类的嵌套可以不止一层)。不过静态内部类中却可以拥有这一切。这也算是两者的第二个区别吧。
9.局部内部类:定义在一个方法甚至一个代码块之内。
**它有它自己的作用域,超出了这个范围就无效,除此之外它和其他内部类并没有区别。
当内部类被定义在块中时,对于块中,只能访问包含它的块的final类型变量;对外部类属性却没有限制。
10.匿名内部类 :new dog(){}
11.内部类最大的好外在于:****内部类对外部类的所有内容都是可访问的***,因此它可以参与外部类的方法进行计算。
并且内部类还可以implements和extends其它接口或类,所以可以把内部类看作是一个功能扩大化了的类方法。
12.定义在方法体中的内部类,只能访问方法中定义的被声明为final的局部变量.
原因:定义在方法体中的变量会随着方法的退出而消亡,通过定义其为final变量,可以扩展其生命期,可与访问其类实例的生命期配合,因为类实例的生命期不同于方法和其所属变量,是由系统自动控制回收时机,但对类属性的访问并没有严格的限制。
13.用final定义的局部变量相当于一个常量,其生命周期超出了方法体。
14.因为类B是类A的内部类,类C又是类B的内部类,所以类c也是类
分享到:
相关推荐
Java中的匿名内部类是Java语言的一个独特特性,它允许我们在编写代码时,无需定义一个完整的类,而是直接在需要的地方创建一个类的实例。这种方式在处理简单且仅需使用一次的类实现时非常方便,可以有效减少代码量,...
#### 小结 - **接口**是Java中用于定义行为规范的重要工具,它增强了程序的扩展性和灵活性。 - **内部类**则提供了更加灵活的面向对象编程方式,能够更好地组织和复用代码。 - 通过理解和应用接口与内部类的概念,...
#### 七、小结 内部类为Java程序设计提供了强大的灵活性和封装能力。理解不同类型的内部类以及它们之间的差异对于编写高质量的Java代码至关重要。通过合理使用内部类,开发者可以更好地组织代码逻辑,提高代码的...
下面是对"Java中类的继承学习小结"的详细讲解。 首先,类的继承使用关键字`extends`来实现。子类(也称为派生类)声明时,会指定一个父类(或超类): ```java public class DerivedClass extends BaseClass { //...
软件测试方法小结 ...软件测试方法小结涵盖了划分等价类、边界值分析、语句覆盖、判定覆盖、条件覆盖、路径覆盖、判定-条件覆盖、功能测试的常用方法、界面测试的常用方法等方面,为软件测试提供了一个全面的指南。
学校垃圾分类活动工作小结 垃圾分类,作为环保行动的重要一环,已经在花都区创英中英文学校取得了初步的成果。面对日益严重的环境压力,尤其是学校内部产生的大量可回收垃圾,该校积极响应政府号召,采取了一系列...
而以双下划线开头的成员则被认为是私有成员,它们只能在类内部被访问。尽管如此,通过类名和双下划线的组合仍然可以访问到私有成员。 6. 继承:继承是面向对象编程的另一个重要特性。通过继承,子类可以扩展父类的...
【Android知识小结第一章】 本章节主要涵盖了Android开发中的一些核心知识点,特别是针对面试中常见的问题进行了总结。以下是对这些知识点的详细解释: 1. 开启多进程:在Android中,可以通过在AndroidManifest....
成员变量`a`被声明为`private`,这意味着它只能在类的内部被访问,不能从类的外部直接访问,这是Java中的封装特性。`print()`方法没有参数,而`print(double a)`方法接受一个`double`类型的参数,并打印出传入的值。...
Flutter的部件分为两种类型:无状态widget(StatelessWidget)和有状态widget(StatefulWidget),每种类型的widget管理内部状态的方式不同。 无状态widget是不可变的,即一旦创建,其内部的成员变量就不能更改,...
### 银行业务系统小结 #### 一、银行业务系统基础知识 银行业务系统是银行内部处理各类金融交易和客户信息的复杂网络,涵盖了从账户管理、交易处理到风险管理等多个方面。为了确保数据的准确性和系统的高效运行,...
### Java语言基础小结 #### 一、JDK, JRE, JVM的关系 - **JVM(Java Virtual Machine)**:Java虚拟机是Java程序跨平台运行的核心,它负责执行Java字节码(.class文件),确保Java程序可以在不同的平台上运行而...
### COM组件学习小结 #### 一、COM组件与MATLAB和VC++混合编程 COM(Component Object Model),即组件对象模型,是一种用于构建应用程序组件的技术。它允许不同语言编写的程序之间进行通信,实现跨语言、跨平台的...
【个人校本研训小结】是对教师个人在特定周期内参与校本研训活动的总结反思,旨在提升教师的专业能力和教育教学水平。校本研训是针对学校内部教师的个性化培训,强调教师自我发展和学校特色相结合。 第一篇小结中,...
7. **接口的实例化**:虽然接口不能被实例化,但是可以通过匿名内部类或者Lambda表达式来实现接口,并创建其实例。 8. **接口与泛型**:接口可以作为泛型的边界,限制实现接口的类的类型参数。 9. **接口与回调**...
6. 内部类:内部类分为成员内部类、局部内部类、匿名内部类和静态内部类。内部类可以直接访问外部类的私有成员,但静态内部类不能直接访问外部类的非静态成员。 7. 垃圾回收机制:Java的垃圾回收自动管理内存,避免...
A类、B类、C类和D类接头分别对应不同位置的焊接接头,接头系数E是根据焊接方法确定的,它影响着接头的强度评估。 此外,对于腐蚀裕量的考虑,需要预防材料因腐蚀、冲蚀或磨损导致的减薄。如果容器受到腐蚀,可能...
这篇博客“RMI入门小结”主要探讨了RMI的基础概念、实现步骤以及常见问题。 1. RMI的基本原理: RMI的核心是通过接口定义服务,服务端实现接口,并将实现类注册到RMI注册表中。客户端通过引用远程接口,即可调用...
### 小结 Java集合框架为开发者提供了丰富的数据结构选择,每种数据结构都有其特定的优势和适用场景。理解这些集合的内部实现机制和性能特点,对于编写高效、可维护的代码至关重要。当面临具体问题时,应根据数据的...
FPGA,全称为Field-Programmable Gate Array,是一种可编程逻辑器件,允许用户通过配置其内部的逻辑块和互连资源来实现特定的数字电路功能。以下是对FPGA相关知识点的详细阐述: 1. FPGA在系统中的角色:在复杂的...