内部类

来源:互联网 发布:java第十版基础篇答案 编辑:程序博客网 时间:2024/06/05 02:05

在 Java 中,允许在一个类的内部定义类,这样的类称作内部类,这个内部类所在的类称作外部类

根据内部类的位置、修饰符和定义的方式可分为成员内部类、静态内部类、方法内部类。

成员内部类

在一个类中,除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。在成员内部类中可以访问外部类的所有成员。

Example.java 示例代码:

class Outer{    private int num = 4;  //定义类的成员变量    //成员内部类    class Inner{        void show(){            //在成员内部类的方法中访问外部类的成员变量            System.out.println("num=" + num);        }    }    //成员方法,该方法中访问内部类    public void test(){        Inner inner = new Inner();        inner.show();    }}public class Example{    public static void main(String[] args){        Outer outer = new Outer();   //创建外部类对象        outer.test();     //调用 test() 方法    }}

此代码,说明内部类可以在外部类中被使用,并能访问外部类的成员。

如果想通过外部类去访问内部类,则需要通过外部类对象去创建内部类对象,创建内部类对象的具体语法格式如下:

外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

Example.java 示例代码:

public class Example{    public static void main(String[] args){        Outer.Inner inner = new Outer().new Inner();  //创建内部类对象        inner.show();   //调用 test() 方法    }}

注意: 如果内部类被声明为私有,外界将无法访问。


静态内部类

使用 static 关键字修饰一个成员内部类,该内部类被称作静态内部类,它可以在不创建外部类对象的情况下被实例化。

创建静态内部类对象的具体语法格式如下:

外部类名.内部类名 变量名 = new 外部类名.内部类名();

Example.java 示例代码:

class Outer{    private static int num = 6;    //静态内部类    static class Inner{        void show(){            System.out.println("num=" + num);        }    }}class Example{    public static void main(String[] args){        Outer.Inner inner = new Outer.Inner();  //创建内部类对象        inner.show();   //调用内部类的方法    }}

注意:
1、在静态内部类中,只能访问外部类的静态成员。
2、在静态内部类中可以定义静态的成员,而在非静态的内部类中不允许定义静态的成员。例如下面的代码,编译会报错

class Outer{    class Inner{        static int num = 10;   //不能定义静态成员,编译报错        void show(){            System.out.println("num=" + num);        }    }}

方法内部类

方法内部类是指在成员方法中定义的类,它只能在当前方法中被使用。

Example.java 示例代码:

class Outer{    private int num = 4;   //定义成员变量    public void test(){        //内部类        class Inner{            void show(){                System.out.println("num=" + num);  //访问外部类的成员变量            }        }        Inner in = new Inner();   //创建内部类对象        in.show();    //调用内部类的方法    }}public class Example{    public static void main(String[] args){        Ourter outer = new Outer();  //创建外部类对象        outer.test();   //调用 test() 方法    }}

在此代码中,由于 Inner 是方法内部类,因此程序只能在方法中创建该类的实例对象并调用 show() 方法。

原创粉丝点击