深入淺出 重溫JAVA中介面與抽象的區別

2021-06-25 12:05:07 字數 1834 閱讀 7936

抽象類:

宣告乙個抽象類,就是在類的宣告開頭、在class關鍵字的前面使用關鍵字abstract

下面定義乙個抽象類,**如下:

abstract

classa}

class b extendsa}

class

abstractdemo

}

分析抽象類的**,得出抽象類的一些特性:

1、  定義乙個抽象類,必須使用關鍵字abstract;

2、  抽象類不存在物件,也就是說,不能使用new運算子直接例項化抽象類;

3、  抽象類不能宣告抽象的構造方法,也不能宣告抽象的靜態(static)方法;

4、  抽象類的所有子類,要麼實現父類中的所有抽象方法,要麼自己也宣告為抽象類;

5、  抽象類中的方法,可以定義為抽象方法(用abstract關鍵字),也可以為普通方法;[注意以上第3點中的區別];

6、  抽象類只能繼承(extends)使用,也就是說父類為抽象類時,它的直接子類只有乙個,這也是繼承的特性;

介面:宣告乙個介面,使用inte***ce關鍵字,可以指定類必須執行哪些工作,但是只定義工作的模版(方法),不具體實現工作的內容。

下面定義乙個介面,**如下:

inte***ce

callback

class inte***cedemo implements

callback

public

static

void

main(string args)

}

分析介面的**,得出介面的一些特性:

1、  定義乙個介面,必須使用關鍵字inte***ce;

2、  介面不能直接例項化,並且它裡面的方法是沒有方法體的;[注意:實際上,它們是抽象方法,在介面中指定的所有方法都可以沒有預設實現]

3、  實現介面的每個類,都必須實現介面中定義的所有方法;

4、  一旦定義了介面,任意數量的類都可以實現(implements)該介面,此外,乙個類也可以實現任意數量的介面,使用逗號隔開;[注意:如果在類實現的兩個介面中都宣告了同乙個方法,那麼這兩個方法的客戶都將可以使用該方法]

5、  介面可以宣告變數,它們被隱式地標識為final和static,這意味著實現介面的類不能修改它們,同時在介面必須初始化它們;

6、  在介面的實現類中,實現介面方法時,必須將方法宣告為public;

7、  雖然介面不能直接例項化,但可以將變數宣告為使用介面而不是類的物件引用;[**如下:]

callback c = new

inte***cedemo();

c.callback(「me」);

//注意:變數c被宣告為介面型別callback,此時,可以使用c訪問callback()方法,但是c不能訪問inte***cedemo類中的其他任何成員,介面的引用變數只知道由介面宣告的方法。

8、  如果乙個類實現了乙個介面,但沒有實現該介面定義的全部方法,那麼必須將該類宣告為抽象類(abstrace);

9、  在宣告巢狀介面的類或介面之外,巢狀介面的名稱必須是完全限定的;[**如下:]

classa}

class b implements

a.nestedif

}class

nestedifdemo

if(nif.isnotnegative(-10))

}}//

注意:類a定義了成員介面nestedif,並且宣告為public,b類通過指定介面名稱完全限定來實現巢狀介面:implements a.nestedif

10、  介面可以通過關鍵字extends繼承另乙個介面,語法和繼承類相同;

java 深入淺出HashCode

首先hashcode,大家都知道是雜湊碼。但是大部分描述都太抽象了,所以我把自己的理解寫在下面。主要是讓大家形象的理解什麼叫物件相等hashcode一定相等,hashcode相等物件不一定相等 前提是要在沒有重寫equals方法 hashcode是通過位址值啊之類的通過某種演算法算出來的,假設 ha...

深入淺出Google ProtoBuf中的編碼規則

在開始本部分的內容之前,首先有必要介紹兩個基本概念,乙個是序列化,乙個是反序列化。這兩個概念的定義在網上搜一下都很多的,但大多都講得比較晦澀,不太好理解,在這裡我會用比較通俗的文本來解釋,盡可能讓讀都朋友們一讀就明白是怎麼回事 序列化 是指將結構化的資料按一定的編碼規範轉成指定格式的過程 反序列化 ...

深入淺出Google ProtoBuf中的編碼規則

在開始本部分的內容之前,首先有必要介紹兩個基本概念,乙個是序列化,乙個是反序列化。這兩個概念的定義在網上搜一下都很多的,但大多都講得比較晦澀,不太好理解,在這裡我會用比較通俗的文本來解釋,盡可能讓讀都朋友們一讀就明白是怎麼回事 序列化 是指將結構化的資料按一定的編碼規範轉成指定格式的過程 反序列化 ...