内部类简要分析

来源:互联网 发布:ubuntu 图形编程 编辑:程序博客网 时间:2024/04/29 13:40

                                                    内部类

内部类定义:在Java中,允许在一个类的内部定义类,这样的类称作内部类也叫做嵌套类,这个内部类所在的类称作外部类。

分类:静态内部类  方法内部类  成员内部类  匿名内部类

创建内部类的对象应该注意点:

第一:在外部类的内部可以直接创建对象。

方式:inner s=new inner();

   第二:在外部类的外部不能直接创建对象,必须使用外部类的类名加以确定。

方式:假设A是外部类,B是内部类

A.B b=newA().new B();

   内部类的一些特性:

第一:内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。

第二:内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。

第三:内部类成员可以直接访问外部类的成员(包括私有成员)。

第四:比类具有更好的封装性。

重点就匿名内部类来讨论。

   匿名内部类一定是跟在new的后面,用其隐含实现一个接口或一个类,没有类名,根据多态,我们使用其父类名。因为匿名内部类属于局部类,所以局部类的所有限制对其生效。匿名内部类是唯一一种无构造方法的类。匿名内部类在编译时,系统自动起名Out$1.class。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。(其中涉及到多态 ,向上转,组合,继承的某些组织方式)

   匿名内部类的特点:

   第一:唯一没有构造函数的类。

   第二:没有权限设置如privatepublic protected static

   第三:只能实例化匿名内部类的实例。

   第四:不能定义没有静态方法,类。

内部类的优点:

代码整洁,紧凑,精简。可以直接使用接口或者类,从而不用增加其他类或接口,只需转换为使用现有的类或接口。

缺点:可读性较差。

           实例化

代码演示:

packagecom.yc.bean;

 

public class Outer {

   private int num = 4; // 定义成员变量

 

   public void test(){

      Inner inner = newInner();

      inner.show();

   }

 

   // 下面的代码定义了一个成员内部类

   class Inner {

      void show(){

        // 在成员内部类的方法中访问外部类的成员变量

        System.out.println("访问外部类的私有成员\t"+"num=" + ++num);

      }

   }

}

packagecom.yc.bean;

 

public class Example{

   public static voidmain(String[] args){

      Outer.Inner inner =newOuter().new Inner();//创建内部类对象

      inner.show();//调用test()方法

   }

  

}

            测试结果显示

访问外部类的私有成员     num=5

packagecom.yc.bean;

 

// 内部类相当于外部类的属性,内部类对象的产生要依赖于外部类对象,只要是属性可以有的修饰符都可以修饰内部类。 

// 内部类在编译时同样会产生class文件。命名为:外部类名$内部类名.class

public class Myclass{

   public Myclass(){

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

   }

 

   class M {

      public M() {

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

      }

   }

 

   public static voidmain(String[] args) {

 

      Myclass my = newMyclass();//外部类声明

      Myclass.M m = my.new M();//内部类声明

   }

}

           测试结果显示

        外部类..........

内部类..........

 

 

                   

 

 

1 0
原创粉丝点击