日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > JAVA之旅(九)——Object類,equals,toString,getClass,內(nèi)部類訪問規(guī)則,靜態(tài)內(nèi)部類,內(nèi)部類原則,匿名內(nèi)部類

JAVA之旅(九)——Object類,equals,toString,getClass,內(nèi)部類訪問規(guī)則,靜態(tài)內(nèi)部類,內(nèi)部類原則,匿名內(nèi)部類

來源:程序員人生   發(fā)布時(shí)間:2016-06-15 15:05:06 閱讀次數(shù):4026次

JAVA之旅(9)——Object類,equals,toString,getClass,內(nèi)部類訪問規(guī)則,靜態(tài)內(nèi)部類,內(nèi)部類原則,匿名內(nèi)部類


每天被1些雜事騷擾,學(xué)習(xí)還得繼續(xù)

1.Object類

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

這里寫圖片描述

上面介紹說,object是類層次結(jié)構(gòu)的根類,也就是超類

  • Object:是所有對(duì)象的直接后者間繼承關(guān)系,傳說中的老祖宗,你父親還有父親,你父親的父親還有父親是爺爺,這是繼承關(guān)系,但是你的祖宗卻只有1位,該類中定義的肯定是所有對(duì)象都具有的功能
class Demo { // extends Object }

1.equals

我們可以用equals去比較兩個(gè)對(duì)象是不是相同

//公共的 類 類名 public class HelloJJAVA { // 公共的 靜態(tài) 無返回值 main方法 數(shù)組 public static void main(String[] str) { // 比較 Demo1 demo1 = new Demo1(); Demo2 demo2 = new Demo2(); System.out.println(demo1.equals(demo2)); } } class Demo1 { } class Demo2 { }

結(jié)果肯定返回的是false

這里寫圖片描述

這里我們要注意的是,他比較的是內(nèi)存地址

假定我們需要定義1個(gè)比較內(nèi)容

//公共的 類 類名 public class HelloJJAVA { // 公共的 靜態(tài) 無返回值 main方法 數(shù)組 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類中已提供了對(duì)對(duì)象是不是相同的比較方法,如果自定義類中也有相同的功能,沒有必要重新定義,只要沿襲父類的功能,簡歷自己的特有內(nèi)容便可,這就是覆蓋,所以我們已復(fù)寫
//公共的 類 類名 public class HelloJJAVA { // 公共的 靜態(tài) 無返回值 main方法 數(shù)組 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; } }

這里應(yīng)用了多態(tài)的向下轉(zhuǎn)型

這里寫圖片描述

2.toString

轉(zhuǎn)換成字符串

//公共的 類 類名 public class HelloJJAVA { // 公共的 靜態(tài) 無返回值 main方法 數(shù)組 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; } }

轉(zhuǎn)換的結(jié)果10甚么呢?

這里寫圖片描述

這個(gè)是甚么值呢?

  • 類名@哈希值

甚么是哈希值?我們可以用toHexString來轉(zhuǎn)換

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

這里寫圖片描述

3.getClass

這個(gè)就不用多說,返回當(dāng)前運(yùn)行的Class,所以

//公共的 類 類名 public class HelloJJAVA { // 公共的 靜態(tài) 無返回值 main方法 數(shù)組 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這個(gè)名稱了

2.內(nèi)部類

這是1個(gè)小知識(shí)點(diǎn),我們先看1下概念

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

  • 訪問特點(diǎn)

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

我們來寫1個(gè)內(nèi)部類

class Outer { int x = 3; void show() { System.out.println("x = " + x); new Inner().fini(); } /** * 內(nèi)部類 * * @author LGL * */ class Inner { void fini() { System.out.println("內(nèi)部類"+x); } } }

內(nèi)部類的訪問規(guī)則上面已體現(xiàn)了

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

那我們可以不可以直接訪問內(nèi)部類中的成員呢?

Outer.Inner inner = new Outer().new Inner(); inner.fini();

這樣就能夠訪問了,不過我們1般都不這樣做,由于大多數(shù)的情況我們會(huì)將內(nèi)部類私有

那你有無想過?為何匿名內(nèi)部類可以訪問外部的成員?我們可以做1個(gè)這樣的小測試,在內(nèi)部類里面定義1個(gè)x分別是成員變量和局部變量

//公共的 類 類名 public class HelloJJAVA { // 公共的 靜態(tài) 無返回值 main方法 數(shù)組 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(); } /** * 內(nèi)部類 * * @author LGL * */ class Inner { int x = 5; void fini() { int x = 6; System.out.println("內(nèi)部類" + x); } } }

我們現(xiàn)在輸出的這個(gè)x你知道是多少嗎?結(jié)果不言而喻,是6

這里寫圖片描述

那我現(xiàn)在想打印這個(gè)5怎樣打?用this就好了

這里寫圖片描述

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

這里寫圖片描述

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

3.靜態(tài)內(nèi)部類

當(dāng)內(nèi)部類在成員位置上,就能夠被成員修飾符所修飾,比如:

  • private,將內(nèi)部類在外部類中進(jìn)行封裝
  • static,內(nèi)部類就具有了static的特性,當(dāng)內(nèi)部類被static修飾后,只能直接訪問外部類中的static的成員,出現(xiàn)了訪問局限,但是靜態(tài)內(nèi)部類出現(xiàn)的不是很多,畢竟有訪問局限

這里寫圖片描述

在外部類中,我們是如何訪問靜態(tài)內(nèi)部類呢?

//公共的 類 類名 public class HelloJJAVA { // 公共的 靜態(tài) 無返回值 main方法 數(shù)組 public static void main(String[] str) { new Outer.Inner().fini(); } } class Outer { private static int x = 3; /** * 內(nèi)部類 * * @author LGL * */ static class Inner { void fini() { System.out.println("內(nèi)部類" + x); } } }

這樣就能夠訪問了

4.內(nèi)部類原則

我們來分析下內(nèi)部類是怎樣來的,為何這樣用

  • 當(dāng)描寫事物時(shí),事物的內(nèi)部還有事物,該事物用內(nèi)部類描寫,由于內(nèi)部事物在使用外部事物

內(nèi)部類就是能直接訪問外部類中的具體事物,1般都用于程序設(shè)計(jì)上

5.匿名內(nèi)部類

1般內(nèi)部類不會(huì)被公有實(shí)現(xiàn),我們內(nèi)部類可以定義在任意位置,也能夠這樣做

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

這段程序,內(nèi)部類會(huì)運(yùn)行嗎?答案是不會(huì),由于沒有對(duì)象,我們就給他new1個(gè)對(duì)象唄

//公共的 類 類名 public class HelloJJAVA { // 公共的 靜態(tài) 無返回值 main方法 數(shù)組 public static void main(String[] str) { new Outer().fini(); } } class Outer { int x = 3; void fini() { class fini { void show() { System.out.println("內(nèi)部類"); } } new fini().show(); } }

這樣就能夠訪問了,內(nèi)部類定義在局部

  • 1.不可以被成員修飾符修飾
  • 2.可以直接訪問外部類中的成員,由于還持有類中的援用,但是不可以訪問他所在的局部變量,只能訪問被final修飾的局部變量

而我們的匿名內(nèi)部類,是甚么概念?我們顧名思義,匿名內(nèi)部類,是沒著名字的

  • 1.匿名內(nèi)部類其實(shí)就是內(nèi)部類的簡寫格式
  • 2.定義匿名內(nèi)部類的條件,就是內(nèi)部類必須繼承1個(gè)類或?qū)崿F(xiàn)接口

正常的邏輯代碼

//公共的 類 類名 public class HelloJJAVA { // 公共的 靜態(tài) 無返回值 main方法 數(shù)組 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(); }

而我們現(xiàn)在要使用匿名內(nèi)部類,就簡化了代碼,具體怎樣做?

//公共的 類 類名 public class HelloJJAVA { // 公共的 靜態(tài) 無返回值 main方法 數(shù)組 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(); }

這個(gè)就是匿名內(nèi)部類

  • 匿名內(nèi)部類的格式:new 父類或接口(){定義子類的內(nèi)容}
  • 其實(shí)匿名內(nèi)部類就是1個(gè)匿名子類對(duì)象。而且這個(gè)對(duì)象有點(diǎn)胖,你也能夠把他理解為帶內(nèi)容的對(duì)象
  • 匿名內(nèi)部類中定義的方法最好不超過3個(gè)

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

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

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久久www成人免费精品 | 国产免费av一区二区三区 | 成人性爱视频在线观看 | 国产综合精品一区二区三区 | 亚洲视频影院 | 免费视频二区 | 欧美日韩卡一卡二 | 国产精品久久久久aaaa九色 | 国产精品久久久久久久久免费 | 炮机高潮痉挛哭叫失禁 | 91国内精品久久 | 成人影院久久 | 精品久久久久久久久久久下田 | 天堂网avav| 国产精品999999 | 日韩二区| 欧美精品xx| 欧美理论在线观看 | 国产亚洲精品久 | 伊人狠狠干 | 国产日韩在线视频 | 成人国产一区 | 国产又爽又黄免费视频 | 婷婷在线综合 | 成人在线免费视频 | 99久久九九 | 国产一区二区免费看 | 成人h片 | 免费在线色 | 国产一区二区三区久久久 | 99精品九九 | 91精品国产综合久久小美女 | av在线播 | 久久精品国产一区二区电影 | 国产免费一区二区三区在线能观看 | 亚洲第一天堂无码专区 | 婷婷亚洲五月 | 日韩视频 中文字幕 视频一区 | 黄色成人在线 | 亚洲福利在线观看 | 中国在线观看片 |