多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > JAVA之旅(九)——Object類,equals,toString,getClass,內部類訪問規則,靜態內部類,內部類原則,匿名內部類

JAVA之旅(九)——Object類,equals,toString,getClass,內部類訪問規則,靜態內部類,內部類原則,匿名內部類

來源:程序員人生   發布時間:2016-06-15 15:05:06 閱讀次數:3997次

JAVA之旅(9)——Object類,equals,toString,getClass,內部類訪問規則,靜態內部類,內部類原則,匿名內部類


每天被1些雜事騷擾,學習還得繼續

1.Object類

Object是甚么呢?我們可以翻閱JAVA API文檔看他的介紹

這里寫圖片描述

上面介紹說,object是類層次結構的根類,也就是超類

  • Object:是所有對象的直接后者間繼承關系,傳說中的老祖宗,你父親還有父親,你父親的父親還有父親是爺爺,這是繼承關系,但是你的祖宗卻只有1位,該類中定義的肯定是所有對象都具有的功能
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

這里寫圖片描述

這里我們要注意的是,他比較的是內存地址

假定我們需要定義1個比較內容

//公共的 類 類名 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; } }

這里應用了多態的向下轉型

這里寫圖片描述

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; } }

轉換的結果10甚么呢?

這里寫圖片描述

這個是甚么值呢?

  • 類名@哈希值

甚么是哈希值?我們可以用toHexString來轉換

System.out.println(demo.toString()); System.out.println(Integer.toHexString(demo.hashCode()));

這里寫圖片描述

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

這里寫圖片描述

方法還有很多,比如getName

System.out.println(demo.getClass().getName());

得到的就是Demo這個名稱了

2.內部類

這是1個小知識點,我們先看1下概念

  • 將1個類定義在另外一個類里面,對峙面那個類就稱為內部類(內置類,嵌套類)

  • 訪問特點

    • 內部類可以直接訪問外部類的成員,包括私有成員
    • 而外部類要訪問內部類中的成員就必須建立內部類的對象

我們來寫1個內部類

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();

這樣就能夠訪問了,不過我們1般都不這樣做,由于大多數的情況我們會將內部類私有

那你有無想過?為何匿名內部類可以訪問外部的成員?我們可以做1個這樣的小測試,在內部類里面定義1個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

這里寫圖片描述

那我現在想打印這個5怎樣打?用this就好了

這里寫圖片描述

那我們想打印這個3呢?this是內部類的,那我們需要外面的this,就用Outer.this.x,輸出的就是3了

這里寫圖片描述

之所以可以直接訪問外部類中的成員是由于內部類中持有了1個外部類的援用,該援用寫法是:外部類名.this

3.靜態內部類

當內部類在成員位置上,就能夠被成員修飾符所修飾,比如:

  • private,將內部類在外部類中進行封裝
  • static,內部類就具有了static的特性,當內部類被static修飾后,只能直接訪問外部類中的static的成員,出現了訪問局限,但是靜態內部類出現的不是很多,畢竟有訪問局限

這里寫圖片描述

在外部類中,我們是如何訪問靜態內部類呢?

//公共的 類 類名 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); } } }

這樣就能夠訪問了

4.內部類原則

我們來分析下內部類是怎樣來的,為何這樣用

  • 當描寫事物時,事物的內部還有事物,該事物用內部類描寫,由于內部事物在使用外部事物

內部類就是能直接訪問外部類中的具體事物,1般都用于程序設計上

5.匿名內部類

1般內部類不會被公有實現,我們內部類可以定義在任意位置,也能夠這樣做

class Outer { int x = 3; void fini() { class fini { void show() { System.out.println("內部類"); } } } }

這段程序,內部類會運行嗎?答案是不會,由于沒有對象,我們就給他new1個對象唄

//公共的 類 類名 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.定義匿名內部類的條件,就是內部類必須繼承1個類或實現接口

正常的邏輯代碼

//公共的 類 類名 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 父類或接口(){定義子類的內容}
  • 其實匿名內部類就是1個匿名子類對象。而且這個對象有點胖,你也能夠把他理解為帶內容的對象
  • 匿名內部類中定義的方法最好不超過3個

OK,本篇幅就到這里,我們的JAVA之旅這個課程不知不覺已講了這么多了,從當初的不肯定,想嘗試1下寫,現在已積累到第9篇了,所以總結出來,我們想做的事情還是得去嘗試1下,萬1實現了呢?

有志同道合的人,歡迎加群:555974449

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日本护士xxxx18.19| 欧美在线精品永久免费播放 | 三级视频在线 | 国产精品免费久久久久影院小说 | 欧美精品国产精品 | 亚洲免费影视 | 国产模特众筹精品视频 | 欧美成人免费一区在线播放 | 97精品国产综合久久久久久欧美 | 免费精品国产福利片 | 日本道在线 | 国内精品久久久久影院老司 | 性欧美18一19sex高清 | 伊人久久精品成人网 | 久久不卡一区 | 亚洲精品456在线观看 | 性欧美videos另类视频 | 美国人和狍xxxx视频 | 亚洲欧洲精品成人久久曰 | 欧美性猛交xxxxx按摩国内 | 国产不卡精品一区二区三区 | 三级国产精品一区二区 | 久久久久免费精品国产 | 伊人亚洲综合网成人 | 欧美xxxxxxxxxxxxx| 丁香综合五月 | 成人看片毛片免费播放器 | 亚洲图片另类图片 | aa级一级天堂片免费观看 | 亚洲综合网站 | 国产在线视频一区二区三区 | 成 黄 色 激 情视频网站 | 国产一区私人高清影院 | 国人精品视频在线观看 | 精品国产一区二区 | 欧美字幕 | 综合欧美日韩 | av中文字幕网免费观看 | 高清欧美性猛交xxxx黑人猛交 | www.欧美色 | 五月天基地 |