LinkedList list= new LinkedList();
創(chuàng)新互聯(lián):成立于2013年為各行業(yè)開(kāi)拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為上1000+公司企業(yè)提供了專業(yè)的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)和網(wǎng)站推廣服務(wù), 按需搭建網(wǎng)站由設(shè)計(jì)師親自精心設(shè)計(jì),設(shè)計(jì)的效果完全按照客戶的要求,并適當(dāng)?shù)奶岢龊侠淼慕ㄗh,擁有的視覺(jué)效果,策劃師分析客戶的同行競(jìng)爭(zhēng)對(duì)手,根據(jù)客戶的實(shí)際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。
list.addFirst(dog2);
list.addLast(dog3);
你往linkedlist總共只加了2只dog,刪掉2個(gè) 就沒(méi)了
當(dāng)用子類的構(gòu)造方法創(chuàng)建一個(gè)子類對(duì)象時(shí),子類的構(gòu)造方法總是先調(diào)用父類的某個(gè)構(gòu)造方法。
也就是說(shuō),如果子類的構(gòu)造方法方法沒(méi)有明顯的指明使用父類的哪個(gè)構(gòu)造方法,子類就調(diào)用父類的不帶參數(shù)的構(gòu)造方法。你這里的Dog子類創(chuàng)建實(shí)例對(duì)象時(shí)首先調(diào)用的是Animal父類的無(wú)參構(gòu)造函數(shù)。你看看是不是構(gòu)造函數(shù)這一塊出了問(wèn)題。
如果你不寫(xiě)這些注釋掉得成員屬性,那么子類和父類的構(gòu)造函數(shù)都是對(duì)父類繼承下來(lái)的屬性進(jìn)行賦值。如果寫(xiě)了這些注釋掉得成員屬性,那么子類的構(gòu)造函數(shù)會(huì)對(duì)這些注釋掉得屬性賦值而不去管從父類繼承來(lái)的屬性,父類的構(gòu)造函數(shù)會(huì)對(duì)父類的屬性進(jìn)行賦值而不會(huì)影響到子類的成員屬性。
看看周圍真實(shí)的世界,會(huì)發(fā)現(xiàn)身邊有很多對(duì)象,車,狗,人等等。所有這些對(duì)象都有自己的狀態(tài)和行為。
拿一條狗來(lái)舉例,它的狀態(tài)有:名字、品種、顏色,行為有:叫、搖尾巴和跑。
對(duì)比現(xiàn)實(shí)對(duì)象和軟件對(duì)象,它們之間十分相似。
軟件對(duì)象也有狀態(tài)和行為。軟件對(duì)象的狀態(tài)就是屬性,行為通過(guò)方法體現(xiàn)。
在軟件開(kāi)發(fā)中,方法操作對(duì)象內(nèi)部狀態(tài)的改變,對(duì)象的相互調(diào)用也是通過(guò)方法來(lái)完成。
對(duì)象是類的一個(gè)具體實(shí)例。類相當(dāng)于對(duì)象的模板。
在Java中,有句話叫“萬(wàn)物皆對(duì)象”。要掌握J(rèn)ava編程,必須正確理解對(duì)象的概念。
在我學(xué)Java的時(shí)候,老師告訴我,Java的對(duì)象不是找對(duì)象的那個(gè)對(duì)象。
上面的比喻也可以。下面是一段偽代碼,模仿你說(shuō)的情況:
girlFriend?myGirlFriend?=?new?girlFriend(女朋友的屬性);//初始化對(duì)象
myGirlFriend.表白(表白的屬性);
不過(guò),這個(gè)比喻不夠確切:
比喻太片面,對(duì)象不一定是女朋友,也可以是其他東西
應(yīng)先有女朋友再表白,否則JVM拋NullPointerException
不應(yīng)該說(shuō)系統(tǒng)給你對(duì)象,應(yīng)該說(shuō)JVM初始化對(duì)象,因?yàn)镴ava代碼是運(yùn)行在JVM中的,而且對(duì)象是用new關(guān)鍵字初始化來(lái)的
整個(gè)過(guò)程中不一定沒(méi)有問(wèn)題,比如現(xiàn)實(shí)生活中表白不一定成功
此外,Java中對(duì)象的英文是Object,翻譯成中文有物體,目標(biāo)等意思,供參考
不清楚的內(nèi)容請(qǐng)自己求度娘
僅前面部分內(nèi)容摘自cnblogs用戶shaojian的文章,其余均為原創(chuàng)
代碼如下:
abstract?class?Animal?{
private?String?name;
public?Animal(String?name)?{
this.name?=?name;
}
public?String?getName()?{
return?name;
}
public?void?setName(String?name)?{
this.name?=?name;
}
public?abstract?void?enjoy();
}
class?Cat?extends?Animal?{
private?String?eyesColor;
public?Cat(String?name)?{
super(name);
}
public?String?getEyesColor()?{
return?eyesColor;
}
public?void?setEyesColor(String?eyesColor)?{
this.eyesColor?=?eyesColor;
}
@Override
public?void?enjoy()?{
System.out.println("小貓"?+?getName()?+?"高興的喵喵叫。");
}
}
class?Dog?extends?Animal?{
private?String?furColor;
public?Dog(String?name)?{
super(name);
}
public?String?getFurColor()?{
return?furColor;
}
public?void?setFurColor(String?furColor)?{
this.furColor?=?furColor;
}
@Override
public?void?enjoy()?{
System.out.println("狗狗"?+?getName()?+?"高興的搖起了尾巴。");
}
}
class?Lady?{
private?String?name;
private?Animal?pet;
public?Lady(String?name,?Animal?pet)?{
this.name?=?name;
this.pet?=?pet;
}
public?String?getName()?{
return?name;
}
public?void?setName(String?name)?{
this.name?=?name;
}
public?Animal?getPet()?{
return?pet;
}
public?void?setPet(Animal?pet)?{
this.pet?=?pet;
}
public?void?myPetEnjoy()?{
pet.enjoy();
}
}
public?class?App?{
public?static?void?main(String[]?args)?{
Cat?cat?=?new?Cat("Jerry");
cat.setEyesColor("藍(lán)色");
Lady?lady1?=?new?Lady("張女士",?cat);
lady1.myPetEnjoy();
Dog?dog?=?new?Dog("旺財(cái)");
dog.setFurColor("黃色");
Lady?lady2?=?new?Lady("王女士",?dog);
lady2.myPetEnjoy();
}
}
前言
這一篇文章是對(duì)java的Object的方法的equals的描述,也包括對(duì)重寫(xiě)方法寫(xiě)的一些理解。
一、Object類的equals方法?
1. Object是什么?
首先要明確Object類中有什么,它是什么?
Object類在《java核心技術(shù)1》中是這樣描述的是Java中所有類的始祖,每個(gè)類都是尤其擴(kuò)展出來(lái)的。所以我們創(chuàng)建的類應(yīng)該都會(huì)有應(yīng)該有這樣的表達(dá):
public class Classname extends Object{ }
登錄后復(fù)制
但其實(shí)上公司早已經(jīng)考慮過(guò)這個(gè)問(wèn)題了,所以每個(gè)類都是默認(rèn)繼承Object的。所以直接就可以就可以引用Object類中的方法,編譯器是不會(huì)報(bào)錯(cuò)的。
2. equals方法的解析
1、 為什么需要這個(gè)方法?
因?yàn)閭鹘y(tǒng)的邏輯判斷“ == ”,是去判斷數(shù)據(jù)在內(nèi)存堆中地址,基礎(chǔ)數(shù)據(jù)在堆中內(nèi)存是相同的,所以 “ ==”最后是對(duì)數(shù)據(jù)的值來(lái)進(jìn)行比較的。
2、 equals方法在書(shū)上的解析
在《Java核心技術(shù)1》中對(duì)equals方法的描述是用于檢查一個(gè)對(duì)象是否等于另一個(gè)對(duì)象,這兩個(gè)對(duì)象是否具有相同的引用。然后接下來(lái)我會(huì)使用代碼,以及代碼運(yùn)行的結(jié)果對(duì)這個(gè)方法進(jìn)行講解。
/*
我們創(chuàng)造一個(gè)Employee類來(lái)驗(yàn)證——一個(gè)對(duì)象是否等于另一個(gè)對(duì)象,這兩個(gè)對(duì)象是否具有相同的引用
*/
public class Employee extends Person{
private int salary;
private int worktime;
public Employee(String name, String sex,int salary, int worktime) {
this.name = name;
this.sex = sex;
this.salary = salary;
this.worktime = worktime;
}
/*
現(xiàn)在我們目標(biāo)是使用equals方法
具體實(shí)現(xiàn)是:
1.首先先使用Employee類來(lái)進(jìn)行信息的比對(duì)
2.再使用Student類和Employee類進(jìn)行比對(duì)
*/
//step1
Employee employee1 = new Employee("啊狗","男",2000,12);
Employee employee2 = new Employee("啊狗","男",2000,12);
//現(xiàn)在我們創(chuàng)造兩個(gè)數(shù)據(jù)皆相同的對(duì)象我們現(xiàn)在進(jìn)行equals方法的判斷
System.out.println(employee1.equals(employee2));
登錄后復(fù)制
?
終端會(huì)給我們輸出false,我們可以開(kāi)調(diào)試來(lái)看看為什么會(huì)輸出flase。我們可以看到employee1和employee2地址會(huì)不同,這就能解釋到《Java核心技術(shù)1》對(duì)Object類中的equals方法是對(duì)比一個(gè)對(duì)象是否等于另外一個(gè)對(duì)象。這不僅僅局限于數(shù)據(jù)的相同,也需要去判斷數(shù)據(jù)存放的地址是否相同。
3. 對(duì)上公司的Object類方法的理解
深入的我們可以去看看上公司如何寫(xiě)Object類的equals方法。
public boolean equals(Object obj)
return (this == obj);
}
登錄后復(fù)制
這里的equals方法接入的是Object類, (this == obj)這句話的意思是當(dāng)前對(duì)象和傳入obj地址是否相等,因?yàn)?“==”的作用就是比較兩者地址是否相同。
4. 對(duì)上公司對(duì)重寫(xiě)的equals方法的一些理解
那么接下來(lái)我們研究方向就是如何讓兩個(gè)數(shù)據(jù)相同的對(duì)象相同,這一點(diǎn)由為之重要。上公司已經(jīng)非常貼心地為我們重寫(xiě)好了這個(gè)方法,我們可以一起看看這個(gè)方法地實(shí)現(xiàn)。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee employee = (Employee) o;
return salary == employee.salary worktime == employee.worktime;
}
登錄后復(fù)制
if (this == o) return true;
登錄后復(fù)制
這句話是自反性的體現(xiàn),先使用this調(diào)用當(dāng)前對(duì)象,然后再將對(duì)象o放入判斷語(yǔ)句中,也就是書(shū)中所說(shuō)的對(duì)于非空引用x,x.equals(x)會(huì)返回true。
if (o == null || getClass() != o.getClass()) return false;
登錄后復(fù)制
這句話是將調(diào)用getClass()方法,因?yàn)閮蓚€(gè)不同的類不可以做比較,會(huì)直接返回false的。具體我們可以利用我們的Student類和Employee類來(lái)做比較。
Employee employee1 = new Employee("啊狗","男",2000,12);
Student student = new Student("啊貓","男",18,"智能科學(xué)");
//2.再使用Student類和Employee類進(jìn)行比對(duì)
System.out.println(employee1.equals(student));
登錄后復(fù)制
無(wú)論從直觀上還是客觀上來(lái)看,我們都能會(huì)覺(jué)得終端會(huì)輸出false,事實(shí)如此,確實(shí)最后終端是輸出了false。
Employee employee = (Employee) o;
登錄后復(fù)制
這句話又是什么意思呢?這個(gè)涉及一個(gè)強(qiáng)制類型轉(zhuǎn)化的知識(shí),因?yàn)樗蓄惗寄J(rèn)繼承或者間接繼承Object類,因?yàn)榍懊嬉呀?jīng)使用getClass方法來(lái)判斷類是否相同,所以這里不需要進(jìn)行instanceof來(lái)判斷兩個(gè)類是否相同,如果兩個(gè)類不同的話,直接運(yùn)行java會(huì)拋出ClassExceptionError錯(cuò)誤。這一步就是讓傳入的值獲得自己私有得信息,這一個(gè)點(diǎn)是涉及多態(tài)的缺點(diǎn)的緣由。
return salary == employee.salary worktime == employee.worktime;
登錄后復(fù)制
這一句話我們可以通過(guò)調(diào)試來(lái)看看到底相比較的是什么?我們可以看到是將當(dāng)前對(duì)象的salary和worktime的值來(lái)和傳入對(duì)象的salary和worktime的值比較,這樣就可以免除“==”比較地址而造成最后的結(jié)果和主觀感覺(jué)不一樣的預(yù)期。
總結(jié)
這篇文章是我第一次寫(xiě)博客,文章結(jié)合《java核心技術(shù)1》對(duì)Object類中的equals方法的一點(diǎn)理解的,本來(lái)想寫(xiě)Object類常用API的一個(gè)匯總,但是鑒于能力的不足,所以最后僅僅只是寫(xiě)了equals方法的理解。這一次編寫(xiě)博客的過(guò)程中,我明顯發(fā)現(xiàn)自己對(duì)很多不理解的地方,本文如果有講解錯(cuò)誤,或者講解不當(dāng)?shù)牡胤?,希望大家能指正我的錯(cuò)誤,感謝!
這類問(wèn)題主要考你接口和抽象類,多態(tài)的問(wèn)題。首先要了解他們的作用,然后再出發(fā)。請(qǐng)打好基礎(chǔ),學(xué)習(xí)這門(mén)語(yǔ)言很重要。。。。
代碼1: public interface Animal
代碼2:public void playSound(){
System.out.println("現(xiàn)在播放"+new Dog().getAnimalName()+"類的聲音");
System.out.println("現(xiàn)在播放"+new Cat().getAnimalName()+"類的聲音");
}
代碼3:
public void cry(){
System.out.println("汪汪.....汪汪");
}
代碼4:public String getAnimalName(){
return "狗";
}
代碼5:
public void cry(){
System.out.println("喵喵.....喵喵");
}
代碼6:public String getAnimalName(){
return "貓";
}
網(wǎng)頁(yè)標(biāo)題:java單身狗表白代碼 java簡(jiǎn)短表白代碼手機(jī)
文章起源:http://jinyejixie.com/article8/dochgip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、ChatGPT、網(wǎng)站內(nèi)鏈、Google、靜態(tài)網(wǎng)站、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)