<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # JAVA之旅(九)——Object類,equals,toString,getClass,內部類訪問規則,靜態內部類,內部類原則,匿名內部類 * * * > 天天被一些瑣事騷擾,學習還得繼續 ## 一.Object類 > Object是什么呢?我們可以翻閱JAVA API文檔看他的介紹 ![這里寫圖片描述](http://img.blog.csdn.net/20160529091530145) > 上面介紹說,object是類層次結構的根類,也就是超類 * Object:是所有對象的直接后者間繼承關系,傳說中的老祖宗,你父親還有父親,你父親的父親還有父親是爺爺,這是繼承關系,但是你的祖宗卻只有一位,該類中定義的肯定是所有對象都具備的功能 ~~~ class Demo { // extends Object } ~~~ ### 1.equals > 我們可以用equals去比較兩個對象是否相同 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { // 比較 Demo1 demo1 = new Demo1(); Demo2 demo2 = new Demo2(); System.out.println(demo1.equals(demo2)); } } class Demo1 { } class Demo2 { } ~~~ > 結果肯定返回的是false ![這里寫圖片描述](http://img.blog.csdn.net/20160529092855306) > 這里我們要注意的是,他比較的是**內存地址** > > 假設我們需要定義一個比較內容 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { // 比較 Demo demo1 = new Demo(5); Demo demo2 = new Demo(8); System.out.println(demo1.Comper(demo2)); } } class Demo { private int num; public Demo(int num) { this.num = num; } public boolean Comper(Demo d) { return this.num == d.num; } } ~~~ > 他返回的也是false,但是我們有必要這樣去做嗎? * object類中已經提供了對對象是否相同的比較方法,如果自定義類中也有相同的功能,沒有必要重新定義,只要沿襲父類的功能,簡歷自己的特有內容即可,這就是覆蓋,所以我們已經復寫 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { // 比較 Demo demo1 = new Demo(5); Demo demo2 = new Demo(5); System.out.println(demo1.equals(demo2)); } } class Demo { private int num; public Demo(int num) { this.num = num; } @Override public boolean equals(Object obj) { // TODO Auto-generated method stub return this.num == ((Demo)obj).num; } } ~~~ > 這里運用了多態的向下轉型 ![這里寫圖片描述](http://img.blog.csdn.net/20160529094448172) ### 2.toString > 轉換成字符串 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { // 比較 Demo demo = new Demo(5); System.out.println(demo.toString()); } } class Demo { private int num; public Demo(int num) { this.num = num; } } ~~~ > 轉換的結果十什么呢? ![這里寫圖片描述](http://img.blog.csdn.net/20160529095413113) > 這個是什么值呢? * 類名@哈希值 > 什么是哈希值?我們可以用toHexString來轉換 ~~~ System.out.println(demo.toString()); System.out.println(Integer.toHexString(demo.hashCode())); ~~~ ![這里寫圖片描述](http://img.blog.csdn.net/20160529095753208) ### 3.getClass > 這個就不用多說,返回當前運行的Class,所以 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { // 比較 Demo demo = new Demo(5); /* * System.out.println(demo.toString()); * System.out.println(Integer.toHexString(demo.hashCode())); */ System.out.println(demo.getClass()); } } class Demo { private int num; public Demo(int num) { this.num = num; } } ~~~ > 我們這里就直接返回了Demo ![這里寫圖片描述](http://img.blog.csdn.net/20160529103145172) > 方法還有很多,比如getName ~~~ System.out.println(demo.getClass().getName()); ~~~ > 得到的就是Demo這個名稱了 ## 二.內部類 > 這是一個小知識點,我們先看一下概念 * 將一個類定義在另一個類里面,對立面那個類就稱為內部類(內置類,嵌套類) * 訪問特點 * 內部類可以直接訪問外部類的成員,包括私有成員 * 而外部類要訪問內部類中的成員就必須建立內部類的對象 > 我們來寫一個內部類 ~~~ class Outer { int x = 3; void show() { System.out.println("x = " + x); new Inner().fini(); } /** * 內部類 * * @author LGL * */ class Inner { void fini() { System.out.println("內部類"+x); } } } ~~~ > **內部類的訪問規則上面已經體現了** * 內部類可以直接訪問外部類的成員,包括私有成員 * 而外部類要訪問內部類中的成員就必須建立內部類的對象 > 那我們可以不可以直接訪問內部類中的成員呢? ~~~ Outer.Inner inner = new Outer().new Inner(); inner.fini(); ~~~ > 這樣就可以訪問了,不過我們一般都不這樣做,因為大多數的情況我們會將內部類私有 > > 那你有沒有想過?為什么匿名內部類可以訪問外部的成員?我們可以做一個這樣的小測試,在內部類里面定義一個x分別是成員變量和局部變量 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { Outer.Inner inner = new Outer().new Inner(); inner.fini(); } } class Outer { int x = 3; void show() { System.out.println("x = " + x); new Inner().fini(); } /** * 內部類 * * @author LGL * */ class Inner { int x = 5; void fini() { int x = 6; System.out.println("內部類" + x); } } } ~~~ > 我們現在輸出的這個x你知道是多少嗎?結果顯而易見,是6 ![這里寫圖片描述](http://img.blog.csdn.net/20160529110853579) > 那我現在想打印這個5怎么打?用this就行了 ![這里寫圖片描述](http://img.blog.csdn.net/20160529110918051) > 那我們想打印這個3呢?this是內部類的,那我們需要外面的this,就用Outer.this.x,輸出的就是3了 ![這里寫圖片描述](http://img.blog.csdn.net/20160529111000427) > 之所以可以直接訪問外部類中的成員是因為內部類中持有了一個外部類的引用,該引用寫法是:外部類名.this ## 三.靜態內部類 > 當內部類在成員位置上,就可以被成員修飾符所修飾,比如: * private,將內部類在外部類中進行封裝 * static,內部類就具備了static的特性,當內部類被static修飾后,只能直接訪問外部類中的static的成員,出現了訪問局限,但是靜態內部類出現的不是很多,畢竟有訪問局限 ![這里寫圖片描述](http://img.blog.csdn.net/20160529112407632) > 在外部類中,我們是如何訪問靜態內部類呢? ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { new Outer.Inner().fini(); } } class Outer { private static int x = 3; /** * 內部類 * * @author LGL * */ static class Inner { void fini() { System.out.println("內部類" + x); } } } ~~~ > 這樣就可以訪問了 ## 四.內部類原則 > 我們來分析下內部類是怎么來的,為什么這樣用 * 當描述事物時,事物的內部還有事物,該事物用內部類描述,因為內部事物在使用外部事物 > 內部類就是能直接訪問外部類中的具體事物,一般都用于程序設計上 ## 五.匿名內部類 > 一般內部類不會被公有實現,我們內部類可以定義在任意位置,也可以這樣做 ~~~ class Outer { int x = 3; void fini() { class fini { void show() { System.out.println("內部類"); } } } } ~~~ > 這段程序,內部類會運行嗎?答案是不會,因為沒有對象,我們就給他new一個對象唄 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { new Outer().fini(); } } class Outer { int x = 3; void fini() { class fini { void show() { System.out.println("內部類"); } } new fini().show(); } } ~~~ > 這樣就可以訪問了,內部類定義在局部 * 1.不可以被成員修飾符修飾 * 2.可以直接訪問外部類中的成員,因為還持有類中的引用,但是不可以訪問他所在的局部變量,只能訪問被final修飾的局部變量 > 而我們的匿名內部類,是什么概念?我們顧名思義,匿名內部類,是沒有名字的 * 1.匿名內部類其實就是內部類的簡寫格式 * 2.定義匿名內部類的前提,就是內部類必須繼承一個類或者實現接口 > 正常的邏輯代碼 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { new Outer().function(); } } class Outer { int x = 3; class Inner extends AdsDemo { @Override void show() { System.out.println("method:" + x); } } public void function() { new Inner().show(); } } abstract class AdsDemo { abstract void show(); } ~~~ > 而我們現在要使用匿名內部類,就簡化了代碼,具體怎么做? ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { new Outer().function(); } } class Outer { int x = 3; // class Inner extends AdsDemo { // @Override // void show() { // System.out.println("method:" + x); // } // } public void function() { // new Inner().show(); new AdsDemo() { @Override void show() { System.out.println("x:" + x); } }; } } abstract class AdsDemo { abstract void show(); } ~~~ > 這個就是匿名內部類 * 匿名內部類的格式:new 父類或者接口(){定義子類的內容} * 其實匿名內部類就是一個匿名子類對象。而且這個對象有點胖,你也可以把他理解為帶內容的對象 * 匿名內部類中定義的方法最好不超過三個 > OK,本篇幅就到這里,我們的JAVA之旅這個課程不知不覺已經講了這么多了,從當初的不確定,想嘗試一下寫,現在已經積累到第九篇了,所以總結出來,我們想做的事情還是得去嘗試一下,萬一實現了呢? ## 有志同道合的人,歡迎加群:555974449 版權聲明:本文為博主原創文章,博客地址:http://blog.csdn.net/qq_26787115,未經博主允許不得轉載。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看