黑马程序员__内部类
来源:互联网 发布:企业 java用什么软件 编辑:程序博客网 时间:2024/06/14 14:50
------- android培训、java培训、期待与您交流! ----------
java中的类,按照其所处的位置可以分为顶层类和内部类,顶层类与内部类两者既有区别
又有相同点。本篇博文将详细介绍内部类的使用方式以及其语法特点。
所谓内部类,就是定义在一个类中的类,按照它的作用域可以分为 成员内部类和局部内部
类,而成员内部类又分为实例内部类和静态内部类。这与内中的各种变量的分类是一致的。
前面在讲修饰符时曾经提到过:顶层类只能处于public和默认访问级别,而成员 内部类可以处于
4中不同的访问级别。
class A{public class B{}}
(1)上述代码中定义了一个公开的成员内部类,如果不希望客户程序访问成员内部类,我们可以将
B类的修饰符改成private。
<span style="font-size:12px;">class A{private class B{}}</span>
(2)成员内部类的完整类名为:
外部类名.内部类名
(3)用static关键字修饰的成员内部类叫做静态内部类,而没有static关键字的叫做实例内部类。
实例内部类具有以下几个特点:
(3.1)在创建实例内部类的实例时,外部类的实例必须存在。例如,要创建B内的实例,必须先创建
A类的实例。所以其实例创建的方式如下
class A{private class B{}public static void main(String[] args){A.B b=new A().new B();//创建一个实例内部类}}
(3.2)实例内部类的实例自动持有外部内实例的引用。在内部类中可以直接访问外部类的所有成员,
包括成员变量和成员方法。
<span style="font-size:12px;">class A{int a=1;static int b=0;static void show(){}void method(){}private class B{a++;//编译成功b++;//编译成功show();//编译成功method();//编译成功}public static void main(String[] args){A.B b=new A().new B();//创建一个实例内部类}}</span>
(3.3)外部类实例与内部类实例是1对多的关系,一个内部类实例只会引用一个外部类实例,而一个
外部类实例会对应零或者多个内部类实例。所以在外部内中不可以直接访问内部类实例成员,必须通
过内部类实例来访问。
<span style="font-size:12px;">class A{void show(){x++;//编译失败}private class B{int x;}</span>
(3.4)在实例内部类中不能定义静态成员,而只能定义实例成员。
class A{private class B{int x;static int w=1;//编译失败,不可定义静态成员}}}
(3.5)如果实例内部类B与外部类A包含同名的成员(比如x),那么在类B中this.x代表B中的x,而
A.this.x代表A中x。
(4)静态内部类是成员内部类的一种,用static关键字修饰。静态内部类有以下几个特点:
(4.1)静态内部类的实例不会自动持有外部类实例的引用,在创建内部类的实例时,不必创建外部
类的实例。
(4.2)静态内部类可以直接访问外部类的静态成员,如果想要访问外部类的实例成员,就必须通过
外部内的实例去访问。
(4.3)在静态内部类中可以定义实例成员以及静态成员。
(4.4)客户类可以通过完整的类名访问静态内部类。
(5)局部内部类是在一个方法中定义的内部类,它的可见范围是当前方法,和局部变量一样,局部
内部类不能用访问控制修饰符来修饰。局部内部类有以下几个值得注意的特点:
(5.1)局部内部类只能在当前方法中使用
class A {void show(){B b=new B();//编译失败}void method{class B{}}
(5.2)局部内部类和实例内部类一样不能包含静态成员。
class A {void method{class B{static int x=9;//编译失败}}}
(5.3)局部内部类和实例内部类一样可以访问外部类的所有成员。
- 黑马程序员__内部类
- 黑马程序员__内部类
- 黑马程序员__内部类和异常
- 黑马程序员__内部类和异常
- 黑马程序员__内部类及其应用
- 黑马程序员__内部类__修饰符
- 黑马程序员Java基础__内部类与异常
- 黑马程序员__ 6java基础 接口 多态 内部类
- 黑马程序员---内部类
- 黑马程序员-内部类
- 黑马程序员-内部类
- 黑马程序员-内部类
- 黑马程序员-内部类
- 黑马程序员-内部类
- 黑马程序员--内部类
- 黑马程序员--内部类
- 黑马程序员--内部类
- <<内部类>>--黑马程序员
- Isomorphic Strings
- CSU1511(BFS)
- foj1605 Enjoy celebration
- 初步认识Java
- 排序算法
- 黑马程序员__内部类
- Java Graphics2D类的绘图方法
- sgu195
- yii2学习之始
- java 面向对象编程之一
- 随便抄一点
- 杭电 HDU ACM 1421 搬寝室
- [leetcode]Maximum Product Subarray
- support for cores revisions 0x17 and 0x18 disabled by module param allhwsupport=0.