Android-Java-普通類與抽象類(覆蓋)&方法重載

覆蓋都是子類與父類之間 & 接口與實現類之間 纔會產生:覆蓋 有不少名稱,覆蓋,複寫,重寫 都是一個意思;

注意:重載都是方法之間  方法同名 不一樣參數,就屬於重載;

 

普通類-覆蓋:

描述Animal動物對象:

 

package android.java.oop18;

public class Animal {

    public void cry() {
        System.out.println("cry");
    }

}

 

 

描述Dog狗對象:

package android.java.oop18;

public class Dog extends Animal {
}

 

描述Cat貓對象:

package android.java.oop18;

public class Cat extends Animal {

    @Override
    public void cry() {
        // super.cry();

        System.out.println("貓🐱 喵喵喵...");
    }
}

 

main測試方法:

package android.java.oop18;

public class Test {

    public static void main(String[] args) {

        new Dog().cry();

        new Cat().cry();

    }

}

 

執行結果:

 

 

以上普通類-覆蓋:若是子類覆蓋了父類的方法,new 子類().cry(); 就是執行子類的方法,若是子類忘記覆蓋父類的方法,new 子類().cry(); 就是執行父類的方法;

覆蓋:返回值 方法名 參數類型與數量 必須一致,而且,子類的修飾權限要大於等於父類(父類public 子類public 👌,父類protected 子類public 👌,父類public 子類protected ❌)

 




 

 

抽象類-覆蓋:

定義Animal抽象類:

package android.java.oop18;

/**
 * 定義一個抽象類,此類 能夠有抽象方法,也能夠有普通方法,靜態方法 等等;
 */
public abstract class Animal {

    /**
     * 舉例:快看快聽 那個動物在叫呢,
     * 因爲這個動物 具體是什麼動物在叫 這個是不知道的,是抽象的模糊的
     * 注意:我這裏只是抽象這個事物,我不執行事物,子類繼承重寫後 在去執行這個事物
     */
    protected abstract void cry();

}

 

描述Cat對象:

package android.java.oop18;

/**
 * Cat屬於動物類,具有動物的行爲;
 * Cat是 Animal 的一種 因此須要繼承 Animal
 */
public class Cat extends Animal {

    /**
     * Cat 🐱 具體的叫 行爲
     */
    @Override
    public void cry() {
        System.out.println("貓🐱 喵喵喵....");
    }
}

 

描述Dog對象:

package android.java.oop18;


/**
 * Dog屬於動物類,具有動物的行爲;
 * Dog是 Animal 的一種 因此須要繼承 Animal
 */
public class Dog extends Animal {

    /**
     * Dog 🐶 具體的叫 行爲
     */
    @Override
    protected void cry() {
        System.out.println("狗🐶汪汪汪....");
    }
}

 

main測試方法:

package android.java.oop18;

public class Test {

    public static void main(String[] args) {

        // 讓具體的狗對象 去叫
        new Dog().cry();

        // 讓具體的貓對象 去叫
        new Cat().cry();

    }

}

 

執行結果:

 

以上抽象類-覆蓋:若是子類覆蓋了父類的方法,new 子類().cry(); 就是執行子類的方法,若是子類忘記覆蓋父類的方法,編譯失敗 報錯,因此必需要覆蓋父類的抽象方法;

覆蓋:返回值 方法名 參數類型與數量 必須一致,而且,子類的修飾權限要大於等於父類(父類public 子類public 👌,父類protected 子類public 👌,父類public 子類protected ❌)

 

  




 

 

方法重載:

重載案例:

 

package android.java.oop18;

class MyDemo {

    public void showValue() {
        System.out.println("my is showValue()");
    }

    public void showValue(String value1) {
        System.out.println("my is showValue(value1)");
    }

    public void showValue(String value1, int value2) {
       System.out.println("my is showValue(value1, value2)");
    }

    public int showValue(String value1, int value2, boolean isAndroidStudy) {
        System.out.println("my is showValue(String value1, int value2, boolean isAndroidStudy) return");
        return 0;
    }

    public String showValue(String value1, int value2, boolean isAndroidStudy, double money) {
        System.out.println("my is showValue(String value1, int value2, boolean isAndroidStudy, double money) return");
        return "返回值";
    }

    public static void showValue(String value1, int value2, boolean isAndroidStudy, double money, boolean isOK){
        System.out.println("my is showValue(String value1, int value2, boolean isAndroidStudy, double money) 靜態方法");
    }
}

public class MethodDemo {

    public static void main(String[] s) {

        MyDemo myDemo = new MyDemo();

        myDemo.showValue();
        
        myDemo.showValue("值");
        
        myDemo.showValue("值", 9);
        
        myDemo.showValue("值", 8, true);
        
        myDemo.showValue("值", 5, true, 10009987.00);
        
        MyDemo.showValue("值", 88, true, 9999945.00, true);
    }

}

 

 執行結果:java

 

在main測試方法中 myDemo.showValue 時, 開發工具只能提示 showValue重載的方法

 

 

覆蓋,複寫,重寫,重載 很容易搞混亂,因此進行對比一下;

 

覆蓋,複寫,重寫的規則:android

 返回值 方法名 參數類型與數量 必須一致,而且,子類的修飾權限要大於等於父類(父類public 子類public 👌,父類protected 子類public 👌,父類public 子類protected ❌)ide

 

方法重載規則:

  方法名相同,參數數量不一樣 或 參數類型不一樣,就是屬於方法重載; (修飾符隨便,是否有返回值隨便)

相關文章
相關標籤/搜索