首先軟件開發(fā)中最難以預(yù)料的莫過于應(yīng)對需求不斷發(fā)生的變化.
望江網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,望江網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為望江上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個售后服務(wù)好的望江做網(wǎng)站的公司定做!
在程序開發(fā)中為了盡可能的減小(不可能避免)變化對總體的影響,一種設(shè)計思想便是在一個繼承關(guān)系的樹形的等級結(jié)構(gòu)中,樹葉節(jié)點(diǎn)應(yīng)當(dāng)是具體類.而樹枝節(jié)點(diǎn)應(yīng)當(dāng)是抽象類(或java接口).
抽象類是用來被繼承的類,只要有可能就不應(yīng)從具體類繼承,在一個從抽象類到多個具體類的繼承關(guān)系中,共同的代碼(公用方法)應(yīng)當(dāng)盡量的移到抽象類里.這樣提供代碼的復(fù)用率.
因此,在編程時,應(yīng)該當(dāng)針對抽象類編程,而不應(yīng)當(dāng)針對具體類編程,因此,在一個合理的編程過程中,抽象類是代碼重構(gòu)的結(jié)果,而非具體類.
package test;
/**
*
* @author JinnL
*父類抽象類
*/
public abstract class Car {
//轉(zhuǎn)彎
abstract void turn();
//啟動
abstract void start();
void what(){
System.out.println("this is "+this.getClass().getSimpleName());
}
public static void main(String[] args) {
/**
* 方法入口
*/
Car[] cars ={new Bicycle(),new Automobile(),new GasAutomobile(),new DieselAutomobile()};
for (Car car : cars) {
car.start();
}
}
}
class Bicycle extends Car{
@Override
void turn() {
System.out.println("this is "+this.getClass().getSimpleName());
}
@Override
void start() {
System.out.println("this is "+this.getClass().getSimpleName());
}
void what(){
}
}
class Automobile extends Car{
@Override
void turn() {
System.out.println("this is "+this.getClass().getSimpleName());
}
@Override
void start() {
System.out.println("this is "+this.getClass().getSimpleName());
}
}
class GasAutomobile extends Automobile{
//重寫start turn
@Override
void turn() {
System.out.println("this is "+this.getClass().getSimpleName());
}
@Override
void start() {
System.out.println("this is "+this.getClass().getSimpleName());
}
}
class DieselAutomobile extends Automobile{
@Override
void start() {
System.out.println("this is "+this.getClass().getSimpleName());
}
void what(){
System.out.println("this is "+this.getClass().getSimpleName());
}
}
//接口
public?interface?BankCard?{
public?void?norm();
}
//工商銀行實(shí)現(xiàn)類
public?class?ICBCBankCard?implements?BankCard?{
@Override
public?void?norm()?{
//?TODO?銀行規(guī)范
}
public?void?saveMoney(int?money){
//TODO?執(zhí)行存錢動作?
}
public?void?transfer(String?account,int?money){
//TODO?執(zhí)行轉(zhuǎn)賬?動作
}
}
//交通銀行實(shí)現(xiàn)類
public?class?CommunicationsBankCard?implements?BankCard?{
@Override
public?void?norm()?{
//?TODO?銀行規(guī)范
}
public?void?saveMoney(int?money){
//TODO?執(zhí)行存錢動作?
}
public?void?transfer(String?account,int?money){
//TODO?執(zhí)行轉(zhuǎn)賬?動作
}
}
上面的例子只是申明了通用的規(guī)范,如果想讓實(shí)現(xiàn)類都能實(shí)現(xiàn)存錢和轉(zhuǎn)賬功能,可以在接口里面聲明這兩個方法,寫一個通用的實(shí)現(xiàn)類,實(shí)現(xiàn)這些方法,然后具體的子類繼承該通用類,這樣可以直接繼承父類方法,如果不同的銀行具體實(shí)現(xiàn)不同,可以復(fù)寫父類中的兩個方法。