您的位置:首页 > 编程语言 > Java开发

java内部类

2015-02-19 15:34 127 查看
内部类分为非静态内部类和静态内部类

非静态内部类

public class DiscernVariable {

private String prop="外部类实例变量";

private class Inclass{

private String prop="内部类实例变量";

public void info(){

String prop="局部变量";

System.out.println("局部变量="+prop);

System.out.println("内部类实例变量="+this.prop);

System.out.println("外部类实例变量="+DiscernVariable.this.prop);

}

}

public void test(){

Inclass inclass=new Inclass();

inclass.info();

}

public static void main(String[]args){

DiscernVariable discernVariable=new DiscernVariable();

discernVariable.test();

}

}

得到局部变量: prop

得到内部类成员变量:this.prop

得到外部类成员变量:外部类.this.prop

非静态内部类和外部内对应关系:

非静态内部类对象必须寄存在外部类对象里面,外部类对象不一定有非静态内部类对象寄存在其中。有非静态内部类对象则一定有外部内对象,反之不一定。

非静态内部类几个特点:

1 非静态内部类的成员可以访问外部类的private成员,反过来不可以。

2 非静态内部类不能定义静态成员,不能有静态方法,静态成员,静态初始化块。

3 外部类静态成员中不能直接使用非静态内部类。

在外部类以外的地方使用非静态内部类

1 内部类对象定义

定义外部类.内部类 内部类对象

2 内部类对象实例化

内部类对象 =外部类对象.new 内部类构造方法();

例子:

DiscernVariable discernVariable= new DiscernVariable();

DiscernVariable.Inclass inclass=discernVariable.new Inclass();

inclass.info();

静态内部类

public class AccessStaticInnerClass {

private int prop1=5;

private static int prop2=9;

static class InnerClass{

private int age=10;

public void info(){

//System.out.println(prop1);

System.out.println(prop2);

}

}

public static void main(String[] args) {

AccessStaticInnerClass.InnerClass inner=new AccessStaticInnerClass.InnerClass();

inner.info();

}

}

静态内部类可以包含静态成员,非静态成员,静态内部类不能访问外部类成员变量,只能访问类变量。

静态内部类和外部内对应关系:

静态内部类对象不寄存在外部类对象里面,而是寄存在外部类本身中,静态内部类对象只有外部类的类引用,没有外部类的对象引用。

静态内部类特点:

1 静态内部类可以包含静态成员,非静态成员,静态内部类不能访问外部类成员变量,只能访问类变量。

在外部类以外的地方使用静态内部类

1 内部类对象定义

定义外部类.内部类 内部类对象

2 内部类对象实例化

内部类对象 = new 外部类.内部类构造方法();

例子:

AccessStaticInnerClass.InnerClass inner

inclass=new AccessStaticInnerClass.InnerClass();

inclass.info();

可以看出来不管是静态内部类还是非静态内部类,声明的变量语法都是一样的,区别在于构造内部类对象时,静态内部类只需使用外部类即可调用构造方法,非静态内部类必须使用

外部类对象来调用构造器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: