① JAVA中為什麼要使用介面,繼承介面不是還要重寫方法嗎為什麼不直接寫那些方法呢
這樣跟你說吧,比如一家生產主板的 廠商,它生產主板時,肯定會有顯卡、音效卡、內存、硬碟等等一大堆介面,如果 全讓主板商自己設定方法的話 那不是很麻煩?如果人家顯卡的製造商升級顯卡了 那主板生產商 就必須得重新製造主板以匹配顯卡, 所以說這個是很不方便的。
所以 就只設定一個介面就好了,具體的實現方法,你顯卡生產商自己搞定,硬碟生產商就自己搞定硬碟的實現方法,那不是我主板生產商的事,我只給你們提供介面就OK了,
JAVA 介面就是這個作用,如果 你學到後面就感覺到介面是多麼重要了
看 完這個例子 我想你應該明白介面了
② java里重寫某個方法後為什麼在重寫的方法里還要調用父類的該方法
因為父類的方法不能完全實現想要的功能,它只能實現部分我們需要的功能,所以重寫的方法是擴展了父類方法的功能。
如果父類方法能完全實現我們想用的功能,就不需重寫該方法;如果父類方法所實現的功能跟我們所需的功能完全不同,就要全部重寫;如果父類方法只是部分實現了我們所需的功能,就要在重寫方法時調用父類方法,並在其上擴展功能。
③ java裡面的 toString()方法重寫是怎麼回事啊
string是一個對象,但也可以用基本類型創建的方式來創建,例如:
String s="abababababa";// 基本類型創建的方式
String s= new String("asdsad");//對象
java里,所有的類,不管是java庫裡面的類,或者是你自己創建的類,全部是從object這個類繼承的。object里有一個方法就是toString(),那麼其實所有的類創造的時候,都有一個toString的方法。java輸出用的函數print();是不接受對象直接輸出的,只接受字元串或者數字之類的輸出。例如:
class Acccc
{}
Acccc s1 = new Acccc();
System.out.print(s1);
按照print接受的類型來說,s1是不能直接輸出的,那麼是否代表這個是不能編譯運行的呢?當然不是。因為當print檢測到輸出的是一個對象而不是字元或者數字時,那麼它會去調用這個對象類裡面的toString 方法。
即使你沒有創建,因為是所有的類都是集成object類,所以自然也繼承了這個方法。所以默認情況下,你輸出一個對象,會調用這個對象繼承的toString方法,而object里的這個方法,默認的功能是返回這個對象的名稱。
class A
{
String toString()
return 「cao」;
}
class B
{
public static void main(String [] args)
{
A x1 = new A();
System.out.println(x1);//輸出就是"cao"……
}
}
④ 怎麼重寫父類中的方法
java中重寫父類的方法只需寫出與父類一模一樣的這個方法即可,包括方法名,參數類型,參數值,返回值。
事例代碼如下:
public class Demo extends FDemo{
public static void main(String[] args) {
a();//運行輸出b
}
static void a(){
System.out.println("b");
}
}
class FDemo{
static void a(){
System.out.println("a");
}
}
java重寫父類方法後,原有的父類裡面的實現全部清空,變為重寫後的內容。
⑤ java為什麼要重寫equals !
默認equals在比較兩個對象時,是看他們是否指向同一個地址的。
但有時,我們希望兩個對象只要是某些屬性相同就認為他們的quals為true。比如:
Student s1 = new Student(1,"name1");
Student s2 = new Student(1,"name1");
如果不重寫equals的話,他們是不相同的,所以我們要重些equals,判斷只要他們的id和名字相同equals就為true,在一些集合里有時也這樣用,集合里的contain也是用equals來比較
⑥ JAVA為什麼要重寫系統已有的方法居然要重寫還不如自定義一個方法
我不說什麼特別難懂的、舉個很簡單例子
lz上過QQ吧?
咱們上Q的時候,不是可以發圖片、字體、語音、等等?
如果讓你寫這個功能,lz你會怎麼寫呢?
寫一個發圖片的方法、寫一個發字體的方法、寫一個發語音的方法? 這樣?
這樣寫,最起碼我覺得有2個很笨的缺點、、
第一,要寫的方法多了很多、、
第二,對象在調用方法的時候,要知道調用的是哪個方法、、 是調用發字體、還是發語音、還是發圖片等等?
這樣不如弄一個父類,在父類中定義一個show()方法。然後子類繼承父類。(子類就是指那些發字體的類、發語音的類、發圖片的類)
然後各個子類重寫父類的show方法、要發字體的就寫發字體,發語音的就發語音。。。。。
然後,你就用一個父類的引用指向子類對象,如 :
Father a = new Son();
然後調用它的show方法
a.show();
假設這個 new Son , new 的是發字體的, 那它調用show方法的時候,自然是調用自己的show方法、、也就是發字體的方法
假設這個 new Son, new 的是發圖片的,那它調用的就是發圖片的方法、、
如此類推
lz 不覺得這樣很方便嗎? 只寫一個show 方法, 不同的對象去調用有不同的效果。
也解決了我上面說的那2個很笨的缺點。
優點:
1、不用寫很多方法,只寫一個show方法就可以了、
2、對象調用方法的時候只要調用show方法就可以了,雖然調用的是同一個方法,但是卻因為不同的對象調用而產生不同的效果、
其實說那麼多,我說的也像二樓說的,說的也是多態性、、
上面只是舉個例子,當然我是不知道QQ這個在發字體或者語音是怎麼寫的、、
⑦ 為什麼重寫equals方法,一定要重寫HashCode方法
重載了equals,比如說是基於對象的內容實現的,而保留hashCode的實現不變,那麼很可能某兩個對象明明是「相等」,而hashCode卻不一樣。
這樣,當你用其中的一個作為鍵保存到hashMap、hasoTable或hashSet中,再以「相等的」找另一個作為鍵值去查找他們的時候,則根本找不到。
使用HashMap,如果key是自定義的類,就必須重寫hashcode()和equals()。
而對於每一個對象,通過其hashCode()方法可為其生成一個整形值(散列碼),該整型值被處理後,將會作為數組下標,存放該對象所對應的Entry(存放該對象及其對應值)。 equals()方法則是在HashMap中插入值或查詢時會使用到。當HashMap中插入值或查詢值對應的散列碼與數組中的散列碼相等時,則會通過equals方法比較key值是否相等,所以想以自建對象作為HashMap的key,必須重寫該對象繼承object的hashCode和equals方法。 2.本來不就有hashcode()和equals()了么?幹嘛要重寫,直接用原來的不行么? HashMap中,如果要比較key是否相等,要同時使用這兩個函數!因為自定義的類的hashcode()方法繼承於Object類,其hashcode碼為默認的內存地址,這樣即便有相同含義的兩個對象,比較也是不相等的,例如,生成了兩個「羊」對象,正常理解這兩個對象應該是相等的,但如果你不重寫 hashcode()方法的話,比較是不相等的!
HashMap中的比較key是這樣的,先求出key的hashcode(),比較其值是否相等,若相等再比較equals(),若相等則認為他們是相等的。若equals()不相等則認為他們不相等。如果只重寫hashcode()不重寫equals()方法,當比較equals()時只是看他們是否為同一對象(即進行內存地址的比較),所以必定要兩個方法一起重寫。HashMap用來判斷key是否相等的方法,其實是調用了HashSet判斷加入元素是否相等。
引用別人說的一段話哈~
一般來說,如果你要把一個類的對象放入容器中,那麼通常要為其重寫equals()方法,讓他們比較地址值而不是內容值。特別地,如果要把你的類的對象放入散列中,那麼還要重寫hashCode()方法;要放到有序容器中,還要重寫compareTo()方法。
equals()相等的兩個對象,hashcode()一定相等;
equals()不相等的兩個對象,卻並不能證明他們的hashcode()不相等。換句話說,equals()方法不相等的兩個對象,hashcode()有可能相等。(我的理解是由於哈希碼在生成的時候產生沖突造成的)。
反過來:hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等
⑧ servlet中為什麼要重寫doGet或者doPost方法
重寫的意義在於自身對訪問請求的內容、響應結果等進行自定義的處理,根據form或者url提交過來的訪問請求,進行分析和處理,滿足自身的業務邏輯。重寫的好處就在於只關注要實現的業務邏輯部分,底層通信等機制都不需要使用者關心。
⑨ 重寫的作用
呵呵,因為子類有了這個方法後就不用用父類的了。因為他們的具體內容是不一樣的
比如。
class Father{
public void run(){
System.out.println("10m/s");
}
}
class Sun extends Father{
public void run(){
System.out.println("20m/s");
}
}
因為father有run這個動作,sun也用這個動作,但是他們的具體內容可能不一樣,比如速度。
⑩ java怎麼重寫一個方法
抽象方法:在類中沒有方法體的方法,就是抽象方法。
你類中的抽象方法就沒有裡面的語句,也就是說你這根本就不符合抽象方法的定義。
如果不是抽象方法super.get()
class A{
void get(){ int i=1;i++;}
}
public class B extends A{
public static void main(String args[]) {
B b = new B();
b.get();
}
void get(){
super.get();
}
}