Java基础 抽象类和接口的区别、equals 与 == 的区别
一、抽象類和接口有什么區別
????????抽象類與接口都用于抽象,但是抽象類可以有自己的部分實現,而接口規范某一行為,調用者實現這個接口。
? ? 主要區別:
? ? ? 1、抽象類還是類只能單繼承,而接口卻可以多實現。
??????2、抽象類滿足所有類的屬性,但是不可以被實例化。但它含main方法的話可以被調用。而接口不能實例化對象,沒有構造方法,不能包含成員變量,除了static和final變量。
??????3、接口的成員變量和方法必須是public修飾。
??????4、抽象類中的方法可以有方法體,實現方法的具體功能,而接口不能。
????????分析:
???????????? 實際上二者的使用動機不同進而使設計思想也不同。
?????????????抽象類實際上就是對一類事物的抽象,運用抽象類即可以預先留可能行為,讓繼承的類去實現,亦可以直接實現引用。而接口則完全就是為了被調用而設計,當這一方法的實現改變的時候只需要改變實現類中重寫的這個方法即可。而且接口并沒有實例化創建構造方法,一個類可以實現多個接口,對實現接口的方法進行內容編輯。
二、equals與==的區別
? ? ? ? ? ?上面兩個都是用來比較是否相等,==是值等,equals是內容相等。
? ? ? ?分析:? ? ?
????? ? ? 在這里也要講一下Java的內存,以后會在博客里面詳細將,這里主要針對equals和==來說一下:
????????? Java運行時的內存是分:方法區,虛擬機棧區,堆區,程序計數器,本地方法棧。
????????? 通常我們new?的類存儲的內容存放在堆存儲區中。例如:
????????????String test=?new String("abc");
?????????????test則存儲在棧區中,“abc”則存儲在開辟的堆中。
????????? ? 當使用equals時,例如:String test2 = new String("a");?
??????????????test2.equals(test);//表明在test2在棧中的索引所指向堆內存中內容是否等于test索引所指向的堆內存中的內容
?? ?????????下面是String中的equals的源碼,可以看出equals是拿出一個對象的內容去比較是否相等,相等返回true不等返回false。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
????????? ? 而用==?比較的則是棧的內容。
????????????? ? if(test==test2)//這樣比較的的是test的地址和test2的地址是否相等。
????????????? ? 這個地址肯定是false,因為兩個test開辟了兩個堆空間地址肯定是不一樣的
????????????? ? 若 String?test 1= “a”;
????????????????? ? String test3 ="a" ;
????????????? ? 此時 if(test1==test3) //此時“a”是存放在常量池中,(常量池是方法區的一部分)因為a相同,所以test3和test1指引的是同一地址,所以他們二者的值也相等結果為true。若test3 ="abc",的話在創建的過程中因為內容不同所以"abc"在常量池中與“a”的地址不同即結果為false。
????????????? ? 基本類型判斷相等只能用==。例如:
????????????? ? int a = 3; int b = 4;
????????
????
????????
總結
以上是生活随笔為你收集整理的Java基础 抽象类和接口的区别、equals 与 == 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础学习巩固3--重载和重写分析
- 下一篇: Java基础 反射