自家用的java小總結(2.4):類的知識的查漏補缺(內部類)

來源:互聯網
上載者:User

標籤:des   blog   java   使用   io   strong   ar   div   

12      首先,這是一篇自己用的文章,不對讀者承擔任何責任,所以,要帶著批判的眼光來看下面的文章

 

 

  

1 發現了,得加上輸出結果,怕自己出錯,~~

 

 

這篇文章說了些什麼?

這文章是我近來8.6號來在編程思想上打的代碼,從0~200頁的源碼接近到在這裡,下文正是總結這0~200頁的的知識,涉及到介面,內部類.初始化,數值計算的一些細節.此文章不會一下子寫完,可能隔一天可能再補下來.因為代碼確實有點多..

注意

1 我的注釋不一定正確(不過各小標題和代碼一定是正確的,因為是書本上的原話,但是注釋不一定正確),如果你確信我的內容的話,你可能會損失很大,因為我只是個菜鳥,我只是來補救一些知識的而已,如果不複製(最好自己打上)代碼運行一次,可能會被我的在代碼的注釋所誤解, 歡迎提意見和評論~~~你的意見和評論是我更新的動力(促進我更快滴讀完編程思想)

本文適合讀者

   適合有一定的編程基礎的人,因為My Code可能出錯,建議零基礎的人找本書先看看,或者一定要複製My Code運行一下,否則,後果將不堪設想  <( ̄▽ ̄)> 哇哈哈…因為我也只是新手  

 

再一次提醒

下面的注釋只是我個人的總結.
我的注釋不一定正確(不過各小標題和代碼一定是正確的,因為是書本上的原話,但是注釋不一定正確)
,但是注釋的語序淩亂各種天花百草不說了.!!!!絕非書本原話!!!!所以要最好還是把My Code複製下來,運行一遍,也可以把我的注釋刪掉,或者提示我說應該怎麼說,應該怎麼說.

再一次感謝

1 感謝你可以抽出你的時間來進行下面閱讀,思考的碰撞是智慧產生的前提.謝謝你的閱讀和你願意複製My Code並閱讀我那千奇百怪無比醜的注釋來進行思考的碰撞!~!~

 

 

本文:

內部類對於外部類來說,像是定義的關係外部類對於內部類而言,像是繼承的關係

 

 

1.內部類的對象的建立

通常都需要依賴外部類對象來使用
1.定義一個外部類對象p
第一個p.new 內部類對

 

package test.java;public class Parcel2{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 = contents();Destination d = to(dest);System.out.println(d.readLabel());}public static void main(String[] args) {Parcel2  p = new Parcel2();p.ship("Tasmania");Parcel2 q = new Parcel2();//可以兩種這樣的迴歸Parcel2.Contents c = q.contents();Parcel2.Destination d= q.to("Borneo");}  }

 3.   .this和.new的介紹咯

package test.java;public class DotThis{void f(){System.out.println("DonThis.f()");}public class Inner{public DotThis outer(){return DotThis.this;  //這個this 是innner的this}public void haveATry(){//this.f();DotThis.Inner.this.f();}void f(){System.out.println("Inner This");}}public Inner inner(){return new Inner();}public static void main(String[] args) {DotThis dt = new DotThis();//注//DotThis.Inner dt = new DotThis().new Inner();//這樣才可以DotThis.Inner dti = dt.inner();//返回內部類的對象//給dti的inner//在這裡也可以證明 內部類必須依賴一個外部類的對象來建立 對象//但這就奇怪了//如果這樣的話,‘//建立一個內部類的對象->  dti.outer().f();//但是這個通過Inner的返回傳現調用的是外部類的F()方法,也就是說,外部類的dti.haveATry();//這裡證明了DTI是內部類的對象}}

 

DonThis.f()Inner This

 4.在方法裡定義內部類

package test.java;interface Destination{}public class Parcel5{public Destination destination(String s){  //方法裡定義內部類class PDestination implements Destination{   //這個類是方法的一部分,而不是類的一部分private String label;//在方法外不能訪問 PD類private PDestination(String whereTo){label = whereTo;}public String readLabel(){return label;}}return new PDestination(s);  //返回內部類對象}public static void main(String[] args) {Parcel5 p= new Parcel5();Destination d = p.destination("ABC");   //也能被賦值}}

 5.if裡面的內部類

package test;interface Destination{}public class Parcel6{private void internalTracking(boolean b){if ( b){class TrackingSlip{private String id;TrackingSlip(String s){id =s;}String getSlip(){return id;}}TrackingSlip ts = new TrackingSlip("Slip");String s = ts.getSlip();System.out.println(s);//在if裡面定義  和使用內部類完全 大丈夫~~~  表明 內部類 也只是一個變數類型(特殊的)}//TrackingSlip ts = new TrackingSlip("x");在 if 外 Tracking類型就無法解析了}public void track(){internalTracking(true);}public static void main(String[] args) {Parcel6 p = new Parcel6();p.track();}}

 

Slip

 6.匿名內部類

new 父類介面(){    //注意在這裡會覆蓋父類的方法.}//分號不能丟;

 

package test;public class Parcel8{public Wrapping warpping (int x){//這裡設定一個參數,傳過來當構造器的從參數return new Wrapping(x)//如果高早起裡有參數,就這樣來{public int value(){return super.value()*47;  //匿名內部類只能寫同名方法,來進行局部覆蓋,匿名內部類方法的調用//必須依賴一個類,也必須依賴一個  返回該類的對象的方法}};}public static void main(String[] args) {Parcel8 p  = new Parcel8();Wrapping w = p.warpping(10);//這裡返回了明顯值得是匿名內部類的對象System.out.println(w.value());}}class Wrapping{private int i;public Wrapping (int x){i  =x;}public int value(){return i;}}

 

470

 

7.內部類裡面的賦值的數字必須final

package test.java;public class Parcel9{//public Destination destination (final String dest){public Destination destination ( String dest){return new Destination(){private String label = dest;//在內部類賦值的的時候,一定要將賦值的參數變成終態public String readLabel(){return label;}};}public static void main(String[] args) {Parcel9 p = new Parcel9();Destination d = p.destination("ABC");}}class Destination{private String label;Destination (){}}

 8.在內部類裡面使用方法

new 父類(){  //注意這裡像是一個新類那樣,不能調用方法.    而調用方法就   {     //初始化域.    }};

 

package test.java;abstract class  Base{public Base(int i){System.out.println("Base constroct , i =" +i);}public abstract void f();}public class AnnoymousConstructor{public static Base getBase(int i){return new Base(i){//首先會new一下建構函式{System.out.println("inside instatnce initializer");//在main {} static{}裡頭才能調用方法- -~~~暈菜了}public void f(){System.out.println("In anoymous f()");}//沒有實現f()方法會報錯, 因為是抽象的方法};}public static void main(String[] args) {Base base = getBase(47);base.f();}}

 8.匿名內部類實現Factory 方法

package test.java;interface Service{void method1();void method2();}interface ServiceFactory{Service getService();} class Implementation1 implements Service{//聲明為abstract class的時候,就不會產生奇葩行為//privat/e Implemention1{}//public void method1();//public vo private Implementation1(){} public void method1() { System.out.println("Implements method"); } public void method2() { System.out.println("Implements method2"); } //static方法 public static  ServiceFactory factory =  new ServiceFactory() { public Service getService() { return new Implementation1(); } };}  class Implementation2 implements Service{ private  Implementation2(){} public void method1() { System.out.println("Implementation2 method1"); } public void method2() { System.out.println("Implementation2 method2"); }  //static  方法 public static  ServiceFactory factory = new ServiceFactory() { public Service getService() { return new Implementation2(); } }; }  public class Factories{ public static void serviceConsumer(ServiceFactory fact) { Service s = fact.getService(); s.method1(); s.method2(); }  public static void main(String[] args) { //為了讓別人不輕易滴製造類的對象,  運用 static來返回對象 ,匿名內部類,不用再建立類的對象的調用serviceConsumer(Implementation1.factory);serviceConsumer(Implementation2.factory);} }

 9.在介面中可以定義類的裡面.

package test.java;public interface ClassInIterface{void howdy();class Test implements ClassInIterface{public void howdy(){System.out.println("howdy!");}public static void main(String[] args) {new Test().howdy();   //因為介面都是自動提升為 public 和static的,  變數添加為final ,//這樣的話證明了介面裡面應該是可以定義類,和實作類別,但是不可以寫明方法體}}}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.