初探JAVA內部類細節一

來源:互聯網
上載者:User

標籤:類方法   app   utc   auto   hide   over   inner   tin   enc   

定義:

可以將一個類的定義放在另一個類的內部 這就是內部類。--摘自java編程思想

 

一般實現方式:

public class SimpleInnerClass { class Content {  private int i;   public int getVlaue() {   return i;  }  }   class Description {   private String lable;   Description(String lab) {   this.lable = lab;   }   public String readLable() {   return lable;  } }   public void ship(String lable) {    Content content=new Content();   Description description=new Description(lable);   System.out.println(description.readLable());   }  public static void main(String[] args) {   Parcle2 parcle2 = new Parcle2();  parcle2.ship("hi"); }}
View Code

 

  上面的案例是最普通不過的內部類表達的例子,通過建立內部類對象的引用訪問內部類方法

但一般有更通用的做法,通常是在外圍類建立一個方法關聯內部類的引用;通過這種方式來建立彼此之間的聯絡。以代碼為例:

public class InnerClass {    class Content {        private int i;        public int getVlaue() {            return i;        }    }    class Description {        private String lable;        Description(String lab) {            this.lable = lab;        }        public String readLable() {            return lable;        }    }    public Content getContentInstance() {        return new Content();    }    public Description getDescriptionIntance(String lable) {        return new Description(lable);    }    public void ship(String lable) {        Content content = getContentInstance();        Description description = getDescriptionIntance(lable);        System.out.println(description.readLable());                        System.out.println(description.readLable());                    }    public static void main(String[] args) {        InnerClass parcle2 = new InnerClass();        parcle2.ship("hi");        InnerClass.Content c = parcle2.getContentInstance();// 如果想在外部類的非靜態方法之外的任意位置訪問某個內部類的對象,那麼必須通過OutClass.xx        InnerClass.Description d = parcle2.getDescriptionIntance("hello");    }}
View Code

有了聯絡之後內部類就可以訪問外圍類的所有元素,無論是private類型也可以。

以下代碼即是佐證:

public interface Selector {    boolean end();    Object current();    void next();}public class Sequence {    private Object[] items;    private int next = 0;    public Sequence(int size) {        items = new Object[size];    }    public void add(Object object) {        if (next < items.length) {            items[next++] = object;        }    }     class SequenceSelector implements Selector {        private int i = 0;        @Override        public boolean end() {            // TODO Auto-generated method stub            return i == items.length;        }        @Override        public Object current() {            // TODO Auto-generated method stub            return items[i];        }        @Override        public void next() {            if (i < items.length) {                i++;            }        }    }    /**     * 內部類對象只有與外圍類對象相關聯時才能被建立<p>     * 構建內部類對象時,需要指向一個其外圍類對象的引用;如果編譯器訪問不到這個引用就會報錯     * @return     */    public Selector selector() {        return new SequenceSelector();    }    public static void main(String[] args) {        Sequence sequence = new Sequence(5);        for (int i = 0; i < 5; i++) {            sequence.add(i);        }//        Sequence.SequenceSelector c=sequence.selector();        Selector selector = sequence.selector();        while (!selector.end()) {            System.out.println(selector.current());            selector.next();        }    }}
View Code

 

 在此,比較初始化的內部類細節介紹完畢,下一章筆者在繼續介紹更深一層次的內部類細節

 

 

初探JAVA內部類細節一

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.