内部类

内部类

内部类有两种情况:

(1)     在类中定义一个类(私有内部类,静态内部类)

(2)     在方法中定义一个类(局部内部类,匿名内部类)

私有内部类 —— 在方法之间定义的内部类,非静态

(1)     在外部类的作用范围内可以任意创建内部类对象,即使内部类是私有的(私有内部类)。即内部类对包围它的外部类可见。

Java代码 

//代码1:内部类对外部类可见  

class Outer{  

     //创建私有内部类对象  

     public Inner in=new Inner();  

     //私有内部类  

     private class Inner{  

          ...  

     }  

}

(2)     在内部类中可以访问其外部类的所有域,即使是私有域。即外部类对内部类可见。

Java代码 

//代码2:外部类对内部类可见  

class Outer{  

       //外部类私有数据域  

       private int data=0;  

       //内部类  

       class Inner{  

           void print(){  

                 //内部类访问外部私有数据域  

                 System.out.println(data);  

           }   

       }  

静态内部类  ——  在方法间定义的内部类,静态

内部类也有静态的区别,这就是静态内部类

Java代码 

package hr.test;  

//代码3:静态内部类对外部变量的引用  

public class Outer{    

        private static int i=0;          

        //创建静态内部类对象  

    public Inner in=new Inner();    

    //静态  

    private static class Inner{    

        public void print(){  

                         System.out.println(i);   //如果i不是静态变量,这里将无法通过编译。  

                }  

    }    

}   

静态内部类和私有内部类最大的区别在于,静态内部类中无法引用到其外围类的非静态成员。

局部内部类 —— 在方法中定义的内部类

方法内部类也有两个特点

(1)  方法中的内部类没有访问修饰符, 即方法内部类对包围它的方法之外的任何东西都不可见。

(2)  方法内部类只能够访问该方法中的局部变量,所以也叫局部内部类。而且这些局部变量一定要是final修饰的常量。

Java代码 

class Outter{  

      public void outMethod(){  

             final int beep=0;  

             class Inner{  

                   //使用beep  

             }  

             Inner in=new Inner();  

      }  

内部类的特点总结

在方法间定义的非静态内部类:

内部类中不能定义静态成员变量。

外围类和内部类可互相访问自己的私有成员。

在方法间定义的静态内部类:

只能访问外部类的静态成员。

在方法中定义的局部内部类

该内部类没有任何的访问控制权限

外围类看不见方法中的局部内部类的,但是局部内部类可以访问外围类的任何成员。

方法体中可以访问局部内部类,但是访问语句必须在定义局部内部类之后。

局部内部类只能访问方法体中的常量,即用final修饰的成员。

在方法中定义的匿名内部类:

没有构造器,取而代之的是将构造器参数传递给超类构造器。

原文地址:https://www.cnblogs.com/pengpeng520/p/7601089.html