黑马程序员__内部类

                     ------- 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)局部内部类和实例内部类一样可以访问外部类的所有成员。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值