1. 程式人生 > 其它 >javaSE21/10/12

javaSE21/10/12

繼承

  • 重寫的方法型別可以是父類方法型別的子型別
    如父類方法Object get(),子類是Integer get()也屬於方法重寫
  • 訪問許可權修飾符從高到低:public protected 友好的 private
  • 子類重寫父類方法時,不允許降低訪問許可權,可以提高
  • 關於super
public class TextSuper {
    public static void main(String[] args) {
        Aver aver = new Aver();
        aver.n = 100;
        float r1 = aver.f();
        float r2 = aver.g();
        System.out.println("r1 = "+r1);//輸出結果為50.5,super.n = 100
        System.out.println("r2 = "+r2);//輸出結果為2525.0,在呼叫g()方法時父類的n已經改變
        /*
         float r2 = aver.g();先呼叫g()時,父類的n為預設值0,所以輸出0.0
         float r1 = aver.f();
         */

    }
}
class Sum{
    int  n;
    float f(){
        float sum = 0;
        for (int i = 0; i <= n; i++) {
            sum +=i;
        }
        return sum;
    }
}
class Aver extends Sum{
    int n;

    @Override
    float f() {
        float c;
        super.n = n;
        c=super.f();
        return c/n;
    }
    float g(){
        float c;
        c=super.f();
        return c/2;
    }
}

物件的上轉型物件

  • 當子類建立一個物件時,把這個物件的=引用放到放到父類的物件中
    如:Animal a;
    Tiger b = new Tiger();
    a = b;

abstract類和abstract方法

  • 抽象方法只有宣告,沒有實現
  • 抽象類不能new,可以new它的子類,繼承抽象類的非抽象類必須重寫父類的方法
  • final和abstract不能同時修飾類和方法,final修飾的類不能有子類,修飾的方法不能重寫,而抽象類的子類必須重寫父類的方法
  • 不能用static修飾抽象方法

面向抽象程式設計是為了應對使用者需求的變化,將某各類中因需求變化而改動的程式碼從該類中分離出去,交給子類實現

開閉原則:對擴充套件開放,對修改關閉

  • 應用舉例
abstract public class SIM {//抽象一個卡,卡需要設定卡號,要有所屬公司,能獲取卡號
    public abstract void setNumber(String n);
    public abstract String giveNumber();
    public abstract String giveCorpName();
}
public class SIMOfChinaMobile extends SIM{//卡的型別一
    String number;
    @Override
    public void setNumber(String n) {
        number = n;
    }

    @Override
    public String giveNumber() {
        return number;
    }

    @Override
    public String giveCorpName() {
        return "中國移動";
    }
}
public class SIMOfChinaUnicom extends SIM{
    String number;
    @Override
    public void setNumber(String n) {
        number =  n;
    }

    @Override
    public String giveNumber() {
        return number;
    }

    @Override
    public String giveCorpName() {
        return "中國聯通";
    }
}
public class MobileTelephone {
    SIM card;//用有另一個類作物件的物件
    void useSIM(SIM card){
        this.card = card;
    }
    void show(){
        System.out.println("使用的卡是:"+card.giveCorpName());
        System.out.println("手機號碼是:"+card.giveNumber());
    }
}
public class Application {
    public static void main(String[] args) {
        MobileTelephone mobileTelephone = new MobileTelephone();
        SIM sim = new SIMOfChinaMobile();//sim為上轉型物件,所以可以訪問他的子類的方法
        sim.setNumber("15288888888");
        mobileTelephone.useSIM(sim);
        mobileTelephone.show();
    }
}