java 内部类(内置类,嵌套类)

来源:互联网 发布:大数据与国家安全 编辑:程序博客网 时间:2024/06/06 16:23

作用:

当内部类需要访问另一个类的成员变量时。可以简化编程,使代码模块性更强。

 

限制:

外部类不能访问内部类的成员变量
当内部类设成静态类时,就相当于外部类了。

访问方法中的局部变量时,必须在变量前加上final关键字,并给变量初始化方可使用

 

形式:

在类中定义,在方法中定义

 

例题说明:

内部类可以直接访问外部类的成员变量,在该类中保存了外部类对象的引用变量(对象.this),

当方法使用的变量不存在内部类中时,该类对this的引用会传递到外部类对象的引用上。

DEMO:

public class InnerClassVisitOuterVariable {

 int outNum=123;
 public static void main(String[] args) {
  InnerClassVisitOuterVariable out=new InnerClassVisitOuterVariable(); 
    out.VisitInnerClass();
 }
 
 public void VisitInnerClass(){
  InnerClass inner=new InnerClass();
  inner.ShowInfo();
 } 
 
 //定义内部类,当外部其他类需要访问是在在class前增加public
 class InnerClass{
    public void ShowInfo(){
   System.out.println("outNum的值是:"+outNum);
  }  
 }
}

 

----------------------------------------------------------------------------------------------------------

外部其他类访问内部类:

1,在内部类设置public访问修饰符

2,实例化该内部类的外部类。

3,通过2的实例对象,实例化内部类(即外部类名.内部类 对象名=外部类对象.new 内部类名)

 

 

DEMO:

public class OutClassAppInnerClass {
 
 public static void main(String[] args) {
  InnerClassVisitOuterVariable obj=new InnerClassVisitOuterVariable();
  InnerClassVisitOuterVariable.InnerClass inner=obj.new InnerClass();
  inner.ShowInfo();
 }
}

 

----------------------------------------------------------------------------------------------------------

当成员变量名相同时的访问方式:

1,内部类:this.变量名

2,外部类:外部类名.this.变量名

3,内部方法参数:直接变量名

 

DEMO:

 

public class InnerClassTest {
 public static void main(String[] args) {
  InnerClassTest outer=new InnerClassTest();
   outer.test();
 }
 
 int outVal=100;
 void test(){
  Inner in= new Inner();
  in.display(78);  
 } 
 
 class Inner{
  int outVal=50;
  void display(int outVal){
   System.out.println("参数中的值是:"+outVal);
   System.out.println("内部类的值是:"+this.outVal);
   System.out.println("外部类的值是:"+InnerClassTest.this.outVal);
  }
 }
}

 

原理:在内部类对象保存了一个对外部类对象的引用。

 使用final的原因

是变量的作用域的问题,因为匿名内部类是出现在一个方法的内部的,如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为final。因为虽然匿名内部类在方法的内部,但实际编译的时候,内部类编译成Outer.Inner,这说明内部类所处的位置和外部类中的方法处在同一个等级上,外部类中的方法中的变量或参数只是方法的局部变量,这些变量或参数的作用域只在这个方法内部有效。因为编译的时候内部类和方法在同一级别上,所以方法中的变量或参数只有为final,内部类才可以引用。

原创粉丝点击