Java 基礎 面向對象: 接口(interface )概念 以及接口之練習3 -定義一個接口用來實現兩個對象的比較並 判斷instanceof是否為同類


接口(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("丑小鴨也可以變成白天鵝!");
    }
}
View Code

測試輸出:

丑小鴨也可以變成白天鵝!
鴨子跑啊跑,不然變成黃燜鴨!
紅掌撥清波
*************
鴨子跑啊跑,不然變成黃燜鴨!
紅掌撥清波
丑小鴨也可以變成白天鵝!

 


 

練習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對象 不可進行比較!");
        }
    }
}
View Code

 

輸出結果:

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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM