首页 > 学院 > 开发设计 > 正文

内部类

2019-11-08 01:49:43
字体:
来源:转载
供稿:网友

大部分时候,类被定义在一个独立的class中。在某些情况下,也会把一个类放在另一个类中的内部定义,这个定义在其他类内部的类被称为内部类。包含内部类的类也被称为外部类。

1、内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。

2、内部类成员可以直接访问外部类私有数据,但外部类不能访问内部类的实现细节。

3、匿名内部类仅适用于需要使用一次的类。

4、内部类比外部类可以多3个修饰符:PRivate、protected、static

5、非静态内部类不能拥有静态成员

非静态内部类:

定义格式

public class OuterClass{         class innerClassA{}         public class innerClassB{}	}

从上面代码可以看出,内部类在外部类成员位置,所以说内部类也可以访问外部类的成员。

//TODO 内部类定义并在外部类使用,静态方法不能new内部类

class OuterClass{    class InnerClass    {    }    public static void main(String[] args){        InnerClass innerClass = new InnerClass();    }} 

静态内部类

使用static修饰的一个内部类,则这个内部类属于所在外部类本身,而不属于外部类创建出来的某个对象,因此使用static修饰的内部类被称为类内部类,有的地方也称为静态内部类。

静态内部类可以包含静态成员,也可以包含非静态成员。根据静态成员访问规则,静态内部类的方法或代码块不能访问外部类的实例成员,只能访问外部类的静态成员。

//TODOclass OuterClass{     static String school;    static class InnerClass    {        static{            school= "abcd";        }        String name;        String age;        static String address;    }    public static void main(String[] args){        InnerClass innerClass = new InnerClass();    }}

具有内部类的类被编译后,编译文件格式如下:

使用内部类

定义格式:

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

        

class OuterClass{    class InnerClass    {        String name;        public void printName(){            System.out.println(name);        }    } }class TestInnerClass{    public static void main(String[] args){        OuterClass.InnerClassinnerClass = new OuterClass().new InnerClass();        innerClass.name= "abcd";        innerClass.printName();    }}

使用静态内部类

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

 

class OuterClass{    static class InnerClass    {        String name;        public void printName(){            System.out.println(name);        }    } }class TestInnerClass{    public staticvoid main(String[] args){        OuterClass.InnerClassinnerClass =  newOuterClass.InnerClass();        innerClass.name= "abcd";        innerClass.printName();    }}

局部内部类

 

class OuterClass{    public void method(){        class InnerClass        {            Stringname = "abcd";        }        InnerClass in = new InnerClass();        System.out.println(in.name);    } }class TestInnerClass{    public static void main(String[] args){        OuterClass out = new OuterClass();        out.method();    }}

匿名内部类

匿名内部类没有类名,适用于:仅使用一次的时候。New 该类的父类或接口代表该匿名内部类。

class OuterClass{    public void method(){        new InnerClass(){            public void method(){                System.out.println("这是一个匿名内部类");            }        }.method();    } }class InnerClass{    void method(){};} 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表