我的第一篇CSDN博客之 java内部类—方法内部类

来源:互联网 发布:sharpdesk3.3扫描软件 编辑:程序博客网 时间:2024/05/20 07:36

我的第一篇CSDN博客之 java内部类—方法内部类

定义

    顾名思义,内部类就是一个类在另一个类的内部。

作用

    我认为主要作用有两条:        1. 内部类可以很好的实现隐藏,拥有外部类所有元素的访问权限。        2、可以独立的继承多个具体的或抽象类的能力,使多重继承解决方案变得更完整。

分类

    java内部类分为:匿名内部类、方法内部类、成员内部类、静态嵌套类。

四种内部类的共性

     1. 内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。     2. 内部类被当做外部类的一个成员,因此内部类可以用final、static、private等修饰符修饰,内部类可以随意的访问外部类的成员变量,无论外部类是否是private的。     3. 当内部类声明成static时,就不能随便访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量了。

1、匿名内部类

匿名内部类也就是没有名字的内部类,正因为没有名字,故此类只能用一次,通常用作简化代码。满足下面的一些条件,使用匿名内部类是比较合适的:
  1. 只用到类的一个实例
  2. 类在定以后马上使用
  3. 类非常小(SUN推荐是在4行代码以下)

2、方法内部类

方法内部类就是把类放在另外一个类的方法中。
package com.zzu.edu;public class Person {    public void Study() {        final int i = 6;        final class Child {            public void speakForeign() {                System.out.println(i + "门外语");            }        }        Child s = new Child();        s.speakForeign();    };    public static void main(String[] args) {        Person p= new Person();        p.Study();    }}

运行结果:6门外语。
上面的例子表明我们只知道Person类实现了学习的功能,具体怎样实现的,我们并不知道的。所以可以使用方法中的内部类隐藏我们的信息。
注意

  1. 方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。
  2. 方法内部类对象不能使用内部类所在方法的非final局部变量。因为方法的局部变量位于栈上,只存在于该方法的生命周期内。当一个方法结束后,其栈结构被删除,局部变量变为历史。但是该方法结束后,在方法内创建的内部类对象可能仍然存在于栈中!