javaSE21/10/12
阿新 • • 發佈:2021-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();
}
}