JAVA学习十四:内部类

来源:互联网 发布:其他设备 网络控制器 编辑:程序博客网 时间:2024/05/20 04:48

Java面向对象——内部类

 

内部类的访问规则:

1、内部类可以直接访问外部类中的成员,包括私有的。之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用;格式:外部类名.this

2、外部类要访问内部类,必须建立内部类对象。

 

访问格式:

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

例如:OuterInner in = new Outer()new Inner()

 

1、当内部类定义在外部类的成员位置上时,而且是非私有化的,那么就可以在外部其它类中直接建立内部类对象。

2、当内部类在成员位置上,就可以被成员修饰符所修饰;

比如:private:将内部类在外部类中进行封装。

Static:让内部类具备静态特性;但是当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限性。

 

在外部其它类中,直接访问static内部类的非静态成员:

//创建外部类的内部类对象,并调用内部类的方法。

new OuterInnter()function()

 

在外部其它类中,直接访问static内部类的静态成员:

//静态直接使用类名调用方法:外部类名.内部类名.方法();

OuterInnterfunction()

 

注:当内部类中定义了静态成员,那么该内部类必须也是static修饰的。

当外部类中的静态方法访问内部类时,内部类也必须是静态的。

 

内部类定义在局部位置时:

1、不可以被成员修饰符所修饰。

2、可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。

 

 

匿名内部类:

1、匿名内部类其实就是内部类的简写格式。

2、定义匿名内部类的前提:内部类必须是继承一个类或者是实现一个接口;

3、匿名内部类的格式:new父类或者接口名(){定义子类的内容}

4、其实匿名内部类就是一个匿名子类对象;而且这个对象带着内容。

5、匿名内部类中定义的方法最好不要超过3个。

 

课堂练习题:内部类和匿名内部类的应用

 

interface Inter

{

       public abstract void mothis();

}

 

/*

//内部类

class Test

{

       //Inner实现Inter中的mothis()方法。因为Inter是抽象的,不能创建对像。

       static class Inner implements Inter                     

       {

              //实现父类中的mothis()方法,方便主函数的调用。

              public void mothis()                                        

              {

                     System.out.println("内部类");

              }

       }

 

       //fulou() 为了能调动Inner中的mothis()函数,fulou()必须存储一个Inner类型的对象。

       public static Inter fulou()                                        

       {    

/*

//Inter 父类引用指向子类对像.

//Inter m = new Inner();

//Inner类型的对象,返回到fulou()中,方便主函数中的fulou()调用mothis().   fulou().mothis();

//return m;

*/

             

              //上面两句的简写格式.

              return new Inner();                                                        

       }

}

*/

 

 

//匿名内部类

class Test

{

       public static Inter fulou()

       {

//匿名内部类,因为Inner类是匿名的,所在Inter父引用指向一个子类对像的实体匿名对像。

              return new Inter()  

              {

                     public void mothis()

                     {

                            System.out.println("匿名内部类");

                     }

              };

       }

}

 

class InterText

{

       public static void main(String[] args)

       {

              Test.fulou().mothis();                         

/*

1"Test.fulou()"  Test想要调整动fulou()这个函数,那么fulou()这个函数必须是静态的,因为只有静态的fulou()函数才能直接被Test类名调用。

                                                                     

2mothis()这个函数只能被自己所属类型的对象调用。fulou().mothis() fulou()这个函数想要调动mothis()这个函数,那么fulou()这个函数里面必须存储了一个Inner的对象,因为mothis()只能被自己所属的类对象所调动。所以fulou()这个函数的返回类型必须是一个Inner类型的对象。

*/

       }

}

 

 

 

原创粉丝点击