接口(interface )概念概念筆記 及測試代碼:
/** 面向對象: 接口(interface ) 是與類並行的一個概念:
* 1.接口可以看成一個特殊的抽象類,它是常量與抽象方法的一個集合
* 2.接口里的常量默認: public static final 類型!
* 3.接口里的抽象方法,默認所有方法是: public abstract 修飾
* 4.接口沒有構造器.
* 5.接口定義的是一種功能 ,此功能可以被類所實現(implements),比如:class BB (extends DD) implements AA;
* 6.實現接口的類必須重寫其中的所有抽象類,方可實例化;若沒有重寫所有的抽象方法,則此類仍是一個抽象類.
* 7.類是可以實現(implements )多個接口, 類的繼承(extends)是單繼承!
* 8.接口與接口之間的繼承關系,是可以多繼承!一個可以繼承多個!
* ----------
** 接口與具體的實現類之間也存在多態性
* 1.通過接口可以實現不相關類的相同行為,而不需要考慮這些類之間的層次關系
* 2.接口主要用於定義規范,解除耦合關系.
*/
測試代碼:

public class Main_of_Coding { //TestAbstract public static void main(String[] args) { Duck d=new Duck(); d.fly(); d.run(); d.swim(); System.out.println("*************"); Main_of_Coding.test1(d); Main_of_Coding.test2(d); Main_of_Coding.test3(d); } public static void test1(Runner r){ r.run(); } public static void test2(Swimmer s){ s.swim(); } public static void test3(Flier f){ f.fly(); } } interface Runner{ public abstract void run(); } interface Swimmer{ void swim(); } interface Flier{ void fly(); } class Duck implements Runner,Swimmer,Flier{ @Override public void run() { System.out.println("鴨子跑啊跑,不然變成黃燜鴨!"); } @Override public void swim() { System.out.println("紅掌撥清波"); } @Override public void fly() { System.out.println("丑小鴨也可以變成白天鵝!"); } }
測試輸出:
丑小鴨也可以變成白天鵝! 鴨子跑啊跑,不然變成黃燜鴨! 紅掌撥清波 ************* 鴨子跑啊跑,不然變成黃燜鴨! 紅掌撥清波 丑小鴨也可以變成白天鵝!
練習3:
練習要求:
/** 面向對象: 接口之練習3 * 定義一個接口用來實現兩個對象的比較。 * interface CompareObject{ * public int compareTo(Object o); //若返回值是 0 , 代表相等; 若為正數,代表當前對象大;負數代表當前對象小 * } * 定義一個Circle類。 * 定義一個ComparableCircle類,繼承Circle類並且實現CompareObject接口. * 在ComparableCircle類中給出接口中方法compareTo的實現體,用來比較兩個圓的半徑大小。 * 定義一個測試類TestInterface,創建兩個ComparableCircle對象,調用compareTo方法比較兩個類的半徑大小。 */
編寫代碼:

public class Main_of_Coding { //TestAbstract public static void main(String[] args) { ComparableCircle c1=new ComparableCircle(1); ComparableCircle c2=new ComparableCircle(2); ComparableCircle c3=new ComparableCircle(3); System.out.println(c1.CompareTo(c1)); System.out.println(c1.CompareTo(c2)); System.out.println(c1.CompareTo(c3)); // System.out.println(c1.CompareTo(new String("6666"))); } } interface CompareObject{ public int CompareTo(Object o); } class Circle{ int radio; public Circle(int radio) { this.radio = radio; } public int getRadio() { return radio; } public void setRadio(int radio) { this.radio = radio; } } class ComparableCircle extends Circle implements CompareObject{ public ComparableCircle(int radio) { super(radio); } @Override public int CompareTo(Object o) { if(this==o) return 0; else if(o instanceof ComparableCircle){ //判斷o是否是ComparableCircle ComparableCircle c=(ComparableCircle)o; if(this.getRadio()>c.getRadio()) return 1; else if(this.getRadio()<c.getRadio()) return -1; else return 0; } else{ // return -2; throw new RuntimeException("傳入的非ComparableCircle對象 不可進行比較!"); } } }
輸出結果:
0 -1 -1
添加測試代碼段:
System.out.println(c1.CompareTo(new String("6666")));
結果:
Exception in thread "main" java.lang.RuntimeException: 傳入的非ComparableCircle對象 不可進行比較! at Coding.ComparableCircle.CompareTo(Main_of_Coding.java:61) at Coding.Main_of_Coding.main(Main_of_Coding.java:21)