首页 > 代码库 > 内部类

内部类

内部类

 

1内部类概述

将一个类定义在另一个类的里面,对里面的那个类就称为内部类

package InnerClassDemo;

/*

 * 内部类访问特点

 * 1 内部类可以直接访问外部类中的成员

 * 2 外部类要访问内部类,必须建立内部类的对象

 *

 *

 * 一般用于类的设计

 *

 * 分析事物时,发现该事物描述中还有事物,而且这个事物还在访问访问被描述事物的内容

 * 这时就定义内部类来描述

 */

class Outer

{  

private int num=3;

class Inner

{

void show()

{

System.out.println("show runs"+num);

}

}

public void method()

{

Inner in=new Inner();

in.show();

}

}

 

 

public class Demo {

  public static void main(String[] args) {

  new Outer().new Inner().show();

  new Outer().method();

}   

}

 

 

 

 

 

2内部类修饰符

 

核心思想:内部类相当于外部类的一个成员

 

   package InnerClassDemo;

 

 

class Outer

{  

private static int num=3;

static class Inner

{

void show()

{

System.out.println("show runs"+num);

}

//如果内部类定义了静态成员 那么内部类必须也是静态的

static void function()

{

System.out.println("function run.."+num);

}

}

public void method()

{

Inner in=new Inner();

in.show();

 

}

}

 

 

public class Demo {

  public static void main(String[] args) {

  //创建内部类对象

  //Outer.Inner in=new Outer().new Inner();

  //in.show();

  

  //如果内部类是static的 相当于一个外部类

 // Outer.Inner in=new Outer.Inner();

  

  Outer.Inner.function();

}   

}

 

 

3 内部类细节

package InnerClassDemo;

 

 /*

  * 类一旦嵌套 this就要区分 例如 Outer.thisInner.this

  *

  * 为什么内部类能访问外部类中的成员呢?

  * 那是因为内部类持有了外部类的引用(外部类名.this

  */

class Outer

{  

 int num=3;

 class Inner

{  

 int num=4;

void show()

{   

int num=5;

System.out.println("show runs"+Outer.this.num);

}

 

 

}

public void method()

{

Inner in=new Inner();

in.show();

 

}

}

 

 

public class Demo {

  public static void main(String[] args) {

  

  new Outer().method(); //打印5

  //指定this.num可以打印4  (相等于Inner.this)

  // Outer.this 可以打印3

  

  

}   

}

 

4局部内部类(内部类可以放在局部位置上)

 

/*

内部类在局部位置只能访问局部中被final修饰的局部变量

 

*/

package InnerClassDemo;

 

class Outer

{  

 int num=3;

void method()

{    

                 Final int x=8;  //访问方法中的局部变量要声明为final

  class Inner

  {  

  void show()

  {

  System.out.println("show...."+num);

                               System.out.println("show...."+x);

 

  }

  }

  Inner in=new Inner();  //在内部创建对象

  in.show();

 

}

 

 

 

}

 

 

public class Demo {

  public static void main(String[] args) {

  

  new Outer().method();

 

  

}   

}

 

 

5 匿名内部类概述()

相当于成员内部类+定义对象

 

package InnerClassDemo;

/*

 * 匿名内部类:就是内部类的简写格式

 *

 *    必须有前提:

 *   内部类必须继承或者实现一个外部类或者接口

 *   

 *   匿名内部类 其实就是一个匿名子类对象

 *   

 *   

 *

 *

 *

 *

 */

abstract class mydemo

{

abstract void show();

}

class Outer

{

  int num=4;

  class Inner extends mydemo

  {

  void show()

  {

  System.out.println("show ..."+num);

  }

  }

 

  

  public void method()

  {

 // new Inner().show();

  new mydemo(){

    void show()

    {

     System.out.println();

    }

    

    void haha()

    {

     System.out.println("haha");

    }

       }.haha();

  

  }

}

public class Demo {

 public static void main(String[] args) {

 new Outer().method();

}

}

 

内部类