java中内部类详解

来源:互联网 发布:网络的负面影响规点 编辑:程序博客网 时间:2024/05/23 00:10

                                                                                     java内部类详解   

              在java中,类对于大家来说并不是一个陌生的名词。内部类这个词,想必很多人都不陌生,但是也不会觉得很熟悉 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。因为在开发中我们很少接触这个概念。那么今天我们就好好来探讨一下内部类。下面是下面是本文的目录大纲:

           (一)内部类的基础

           (二)深入理解内部类

           如有不正之处,请多谅解并欢迎批评指正

           请尊重作者的劳动成果,转载请标明原文链接:

           http://write.blog.csdn.net/postedit?ref=toolbar

            (一)内部类的基础

            在《thinking in java》一书中对于内部类是这样定义的:可以将一个类定义在另一个类的定义内部。内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部类的可视性。然而我们必须要了解到,内部类与组合是完全不同的概念,这一点很重要!。

            下面我将以thinking in java中的一段代码作为示例:

            public class demo2 {
                     class Contents{
                             private int i=11;
                         public int value(){
                         return i;
                           }
                        }
                    class Destination{
                             private String label;
                            Destination(String whereTo){
                        label=whereTo;
                              }
                                String readLabel(){
                        return label;
                              }
                                 }
                           public Destination to(String s){
                              return new Destination(s);
                          }
                          public Contents contents(){
                            return new Contents();
                            }
                            public void ship(String dest){
                       Contents c=new Contents();
                        Destination d=to(dest);
                       System.out.println(d.readLabel());
                       System.out.println(c.i);
                        }
                           public static void main(String args[]){
                       demo2 p=new demo2();
                       p.ship("wdahda");
                      demo2 q=new demo2();
                      demo2.Contents c=q.contents();
                      demo2.Destination d=q.to("Broneo");
                        }
               }

      当我们在ship()方法里面使用内部类时,与使用普通类没有什么区别,在这里,实际上的区别是只是内部类的名字是嵌套在demo2类里面的。

在外部类有一种方法,该方法返回一个指向内部类的引用,就像to()方法和contents()中看到那样。

             (二)深入理解内部类

      我们知道在内部类中,内部类可以访问外部类的所有成员属性,包括静态成员和私有成员属性,下面以一个例子作为说明:

             class Circle { 

               private double radius = 0; 

               public static int count =1; 

               public Circle(double radius) { this.radius = radius; } 

               class Draw { //内部类

               public void drawSahpe() 

            { System.out.println(radius); //外部类的private成员 

              System.out.println(count); //外部类的静态成员

           } } }

          注意的是当内部类拥有与外部类重名的成员属性或者成员函数是,若内部类需要访问外部类的成员属性或者方法;应采用:

    外部类.this.成员变量;外部类.this.成员方法;      

         内部类访问外部类当然是可以随心所欲的,但是如果外部类需要访问内部类的成员属性或者成员变量的时候,需要创建一个内部类的对象,然后通过指向这个内部类对象的引用来访问内部类的成员变量:

         class Circle { 

            private double radius = 0; 

           public Circle(double radius) {

            this.radius = radius; 

            getDrawInstance().drawSahpe(); //必须先创建成员内部类的对象,再进行访问 

          }

            private Draw getDrawInstance() {return new Draw(); } 

           class Draw { //内部类 

            public void drawSahpe() { System.out.println(radius); //外部类的private成员 

            } } }



          我我们

       


            

  

  

原创粉丝点击