1、一個(gè)Interface的方所有法訪問(wèn)權(quán)限(visibility)自動(dòng)被聲明為public,確卻的說(shuō),一個(gè)Interface的所有方法只能是public的,你可以顯式聲明一個(gè)方法是public(不推薦),但是不能聲明它是private或protected.但是當(dāng)一個(gè)類實(shí)現(xiàn)某個(gè)接口,定義接口的方法時(shí),必須且只能聲明為public,否則編譯將通不過(guò)。
2、接口不能實(shí)現(xiàn)方法(implement method),只能聲明。接口可以只定義常量但不聲明任何方法。
3、Interface不能有實(shí)例域(instance fields)或靜態(tài)方法(static method),但可以定義常量(define constants),常量自動(dòng)設(shè)為public static final,可以通過(guò)類命直接引用常量,例如
ImplementClass.z
可以通過(guò)接口命和常量名直接訪問(wèn)常量:
FirstInterface.z
4、一個(gè)
非抽象類
(注意是非抽象類!)實(shí)現(xiàn)一個(gè)接口時(shí),必須實(shí)現(xiàn)接口的所有方法,抽象類則不必實(shí)現(xiàn)所有方法。
5、不能使用new操作符實(shí)例化一個(gè)接口,但可以聲明一個(gè)接口變量,該變量必須引用(refer to)一個(gè)實(shí)現(xiàn)該接口的類的對(duì)象。可以使用 instanceof 檢查一個(gè)對(duì)象是否實(shí)現(xiàn)了某個(gè)特定的接口。例如:
if(anObject?instanceof?Comparable){
} 6、接口可以被另一個(gè)接口繼承(但是final好像不能修飾interface,編譯通不過(guò),以后慢慢研究~~)
7、標(biāo)記接口(tagging interface, marker interface)沒(méi)有方法,使用它的唯一目的是可以用instanceof 進(jìn)行類型檢查(Horstmann說(shuō)了,不鼓勵(lì)用這種技術(shù),^_^)
8、
方法的名字和參數(shù)列表被稱為方法的簽名(signature),實(shí)現(xiàn)一個(gè)接口以為著要用完全相同的簽名實(shí)現(xiàn)每個(gè)方法。因此實(shí)現(xiàn)接口方法時(shí),一定要保證返回類型的兼容性。允許實(shí)現(xiàn)類的實(shí)現(xiàn)方法返回類型定義為原返回類型的子類型。這個(gè)跟繼承中子類覆蓋父類方法很相似。
8、例子:

FirstInterface.java
interface?FirstInterface
{
????int?x?=?20;???//int?x;?是不允許的
????public?int?y?=?21;???//private?int?y=21;?或protected?int?y=22;均為非法聲明
????static?int?z?=?22;
????public?static?int?u?=?23;??
????void?foobar();
}
SecondInterface.java
1?/**
2?*?繼承了FirstInterface的所有常量和方法
3?*/?
4?interface?SecondInterface?extends?FirstInterface
5?{
6?????int?squad(int?x);
7?}
ImplementClass.java
?1?/**
?2?*?類ImplementClass?必須實(shí)現(xiàn)FirstInterface和
?3?*?SecondInterface的所有方法
?4?*/
?5?class?ImplementClass?implements?SecondInterface
?6?{
?7?????public?void?foobar()
?8?????{
?9?????????System.out.println("I?love?you!");
10?????}
11?????
12?????public?int?squad(int?x)
13?????{
14?????????return?x*x;
15?????}
16?}
Main.java
?1?public?class?Main
?2?{
?3?????public?static?void?main(String?[]?args)
?4?????{
?5?????????FirstInterface?ic;
?6?????????ic??=?new?ImplementClass();
?7?????????SecondInterface?sic?=?new?ImplementClass();
?8?????????System.out.println(ic.x);
?9?????????System.out.println(sic.y);
10?????????System.out.println(ImplementClass.z);
11?????????ic.foobar();
12?????????sic.foobar();
13?????}
14?}運(yùn)行結(jié)果:
20
21
22
I love you!
I love you!
9、匿名內(nèi)部類(anonymous inner class):
注意一個(gè)特別的例子

AnonymousInnerClass.java
import?java.util.Comparator;
public?class?AnonymousInnerClass
{
????public?static?void?main(String?[]?args)
????{
?????????Comparator<String>?sizeOrder?=?new?Comparator<String>()?
?????????{
?????????????public?int?compare(String?s1,?String?s2)?
?????????????{
?????????????????return?s1.length()?<?s2.length()???-1?:?s1.length()?>?s2.length()???1?:?s1.compareTo(s2);
?????????????}
?????????};?
?????????System.out.println(sizeOrder.compare("Jafe",?"Lee"));
????}
}而java.util.Comparator的定義為

Comparator.java
/*
?*?@(#)Comparator.java????1.26?06/04/21
?*
?*?Copyright?2006?Sun?Microsystems,?Inc.?All?rights?reserved.
?*?SUN?PROPRIETARY/CONFIDENTIAL.?Use?is?subject?to?license?terms.
?*/
package?java.util;
/**
?*?A?comparison?function,?which?imposes?a?<i>total?ordering</i>?on?some
?*?collection?of?objects.??Comparators?can?be?passed?to?a?sort?method?(such
?*?as?{@link?Collections#sort(List,Comparator)?Collections.sort}?or?{@link
?*?Arrays#sort(Object[],Comparator)?Arrays.sort})?to?allow?precise?control
?*?over?the?sort?order.??Comparators?can?also?be?used?to?control?the?order?of
?*?certain?data?structures?(such?as?{@link?SortedSet?sorted?sets}?or?{@link
?*?SortedMap?sorted?maps}),?or?to?provide?an?ordering?for?collections?of
?*?objects?that?don't?have?a?{@link?Comparable?natural?ordering}.<p>
?*
?*?The?ordering?imposed?by?a?comparator?<tt>c</tt>?on?a?set?of?elements
?*?<tt>S</tt>?is?said?to?be?<i>consistent?with?equals</i>?if?and?only?if
?*?<tt>c.compare(e1,?e2)==0</tt>?has?the?same?boolean?value?as
?*?<tt>e1.equals(e2)</tt>?for?every?<tt>e1</tt>?and?<tt>e2</tt>?in
?*?<tt>S</tt>.<p>
?*
?*?Caution?should?be?exercised?when?using?a?comparator?capable?of?imposing?an
?*?ordering?inconsistent?with?equals?to?order?a?sorted?set?(or?sorted?map).
?*?Suppose?a?sorted?set?(or?sorted?map)?with?an?explicit?comparator?<tt>c</tt>
?*?is?used?with?elements?(or?keys)?drawn?from?a?set?<tt>S</tt>.??If?the
?*?ordering?imposed?by?<tt>c</tt>?on?<tt>S</tt>?is?inconsistent?with?equals,
?*?the?sorted?set?(or?sorted?map)?will?behave?"strangely."??In?particular?the
?*?sorted?set?(or?sorted?map)?will?violate?the?general?contract?for?set?(or
?*?map),?which?is?defined?in?terms?of?<tt>equals</tt>.<p>
?*
?*?For?example,?suppose?one?adds?two?elements?{@code?a}?and?{@code?b}?such?that
?*?{@code?(a.equals(b)?&&?c.compare(a,?b)?!=?0)}
?*?to?an?empty?{@code?TreeSet}?with?comparator?{@code?c}.
?*?The?second?{@code?add}?operation?will?return
?*?true?(and?the?size?of?the?tree?set?will?increase)?because?{@code?a}?and
?*?{@code?b}?are?not?equivalent?from?the?tree?set's?perspective,?even?though
?*?this?is?contrary?to?the?specification?of?the
?*?{@link?Set#add?Set.add}?method.<p>
?*
?*?Note:?It?is?generally?a?good?idea?for?comparators?to?also?implement
?*?<tt>java.io.Serializable</tt>,?as?they?may?be?used?as?ordering?methods?in
?*?serializable?data?structures?(like?{@link?TreeSet},?{@link?TreeMap}).??In
?*?order?for?the?data?structure?to?serialize?successfully,?the?comparator?(if
?*?provided)?must?implement?<tt>Serializable</tt>.<p>
?*
?*?For?the?mathematically?inclined,?the?<i>relation</i>?that?defines?the
?*?<i>imposed?ordering</i>?that?a?given?comparator?<tt>c</tt>?imposes?on?a
?*?given?set?of?objects?<tt>S</tt>?is:<pre>
?*???????{(x,?y)?such?that?c.compare(x,?y)?<=?0}.
?*?</pre>?The?<i>quotient</i>?for?this?total?order?is:<pre>
?*???????{(x,?y)?such?that?c.compare(x,?y)?==?0}.
?*?</pre>
?*
?*?It?follows?immediately?from?the?contract?for?<tt>compare</tt>?that?the
?*?quotient?is?an?<i>equivalence?relation</i>?on?<tt>S</tt>,?and?that?the
?*?imposed?ordering?is?a?<i>total?order</i>?on?<tt>S</tt>.??When?we?say?that
?*?the?ordering?imposed?by?<tt>c</tt>?on?<tt>S</tt>?is?<i>consistent?with
?*?equals</i>,?we?mean?that?the?quotient?for?the?ordering?is?the?equivalence
?*?relation?defined?by?the?objects'?{@link?Object#equals(Object)
?*?equals(Object)}?method(s):<pre>
?*?????{(x,?y)?such?that?x.equals(y)}.?</pre><p>
?*
?*?This?interface?is?a?member?of?the
?*?<a?href="{@docRoot}/../technotes/guides/collections/index.html">
?*?Java?Collections?Framework</a>.
?*
?*?@param?<T>?the?type?of?objects?that?may?be?compared?by?this?comparator
?*
?*?@author??Josh?Bloch
?*?@author??Neal?Gafter
?*?@version?1.26,?04/21/06
?*?@see?Comparable
?*?@see?java.io.Serializable
?*?@since?1.2
?*/
public?interface?Comparator<T>?{
????/**
?????*?Compares?its?two?arguments?for?order.??Returns?a?negative?integer,
?????*?zero,?or?a?positive?integer?as?the?first?argument?is?less?than,?equal
?????*?to,?or?greater?than?the?second.<p>
?????*
?????*?In?the?foregoing?description,?the?notation
?????*?<tt>sgn(</tt><i>expression</i><tt>)</tt>?designates?the?mathematical
?????*?<i>signum</i>?function,?which?is?defined?to?return?one?of?<tt>-1</tt>,
?????*?<tt>0</tt>,?or?<tt>1</tt>?according?to?whether?the?value?of
?????*?<i>expression</i>?is?negative,?zero?or?positive.<p>
?????*
?????*?The?implementor?must?ensure?that?<tt>sgn(compare(x,?y))?==
?????*?-sgn(compare(y,?x))</tt>?for?all?<tt>x</tt>?and?<tt>y</tt>.??(This
?????*?implies?that?<tt>compare(x,?y)</tt>?must?throw?an?exception?if?and?only
?????*?if?<tt>compare(y,?x)</tt>?throws?an?exception.)<p>
?????*
?????*?The?implementor?must?also?ensure?that?the?relation?is?transitive:
?????*?<tt>((compare(x,?y)>0)?&&?(compare(y,?z)>0))</tt>?implies
?????*?<tt>compare(x,?z)>0</tt>.<p>
?????*
?????*?Finally,?the?implementor?must?ensure?that?<tt>compare(x,?y)==0</tt>
?????*?implies?that?<tt>sgn(compare(x,?z))==sgn(compare(y,?z))</tt>?for?all
?????*?<tt>z</tt>.<p>
?????*
?????*?It?is?generally?the?case,?but?<i>not</i>?strictly?required?that
?????*?<tt>(compare(x,?y)==0)?==?(x.equals(y))</tt>.??Generally?speaking,
?????*?any?comparator?that?violates?this?condition?should?clearly?indicate
?????*?this?fact.??The?recommended?language?is?"Note:?this?comparator
?????*?imposes?orderings?that?are?inconsistent?with?equals."
?????*
?????*?@param?o1?the?first?object?to?be?compared.
?????*?@param?o2?the?second?object?to?be?compared.
?????*?@return?a?negative?integer,?zero,?or?a?positive?integer?as?the
?????*????????????first?argument?is?less?than,?equal?to,?or?greater?than?the
?????*???????????second.
?????*?@throws?ClassCastException?if?the?arguments'?types?prevent?them?from
?????*????????????being?compared?by?this?comparator.
?????*/
????int?compare(T?o1,?T?o2);
????/**
?????*
?????*?Indicates?whether?some?other?object?is?"equal?to"?this
?????*?comparator.??This?method?must?obey?the?general?contract?of
?????*?{@link?Object#equals(Object)}.??Additionally,?this?method?can?return
?????*?<tt>true</tt>?<i>only</i>?if?the?specified?object?is?also?a?comparator
?????*?and?it?imposes?the?same?ordering?as?this?comparator.??Thus,
?????*?<code>comp1.equals(comp2)</code>?implies?that?<tt>sgn(comp1.compare(o1,
?????*?o2))==sgn(comp2.compare(o1,?o2))</tt>?for?every?object?reference
?????*?<tt>o1</tt>?and?<tt>o2</tt>.<p>
?????*
?????*?Note?that?it?is?<i>always</i>?safe?<i>not</i>?to?override
?????*?<tt>Object.equals(Object)</tt>.??However,?overriding?this?method?may,
?????*?in?some?cases,?improve?performance?by?allowing?programs?to?determine
?????*?that?two?distinct?comparators?impose?the?same?order.
?????*
?????*?@param???obj???the?reference?object?with?which?to?compare.
?????*?@return??<code>true</code>?only?if?the?specified?object?is?also
?????*????????a?comparator?and?it?imposes?the?same?ordering?as?this
?????*????????comparator.
?????*?@see?Object#equals(Object)
?????*?@see?Object#hashCode()
?????*/
????boolean?equals(Object?obj);
}
我敢開(kāi)始看覺(jué)得奇怪,好像在匿名內(nèi)部類中沒(méi)有實(shí)現(xiàn)方法boolean equals(Object obj);后來(lái)仔細(xì)一想,其實(shí)所有的類都是Object的子類,而Object正好有該方法的實(shí)現(xiàn),所以,即使沒(méi)有實(shí)現(xiàn)該方法也是合法的。