您的位置:首页 > 编程语言 > Java开发

java中内部类详解

2017-10-25 19:22 357 查看
                                                                                     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成员 

 
          } } }

          我我们

       我

            

  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: