面向抽象编程
/* * 面相抽象編程*使用對臺進(jìn)行編程的核心技術(shù)之是使用上轉(zhuǎn)型對象,即將abstract 類生命對象作為一個子類的上轉(zhuǎn)對象,那么這個上轉(zhuǎn)對象就可以調(diào)用子類重的方法,*所謂面向抽象編程,是指設(shè)計一個類時,不讓該類面向具體的類,而是面向一個抽象的類,即所設(shè)計類中的重要數(shù)據(jù)是抽象類聲明的對象,而不是具體類聲明的對象。*/
//通過面向抽象來設(shè)計Pillar類,使得該類不依賴具體類,因此每當(dāng)系統(tǒng)增加新的Geometry的子類的時候,如增加一個Triangle子類,就不用再修改Pillar類的任何代碼,就可以使用Pillar創(chuàng)建出具有三角形低的柱體
public abstract class Geometry
{public abstract double getArea();
}
public class Pillar{//設(shè)計一個類使其面向一個抽象的類,而不是具體的類,Geometry bottom;//抽象類Geometry聲明的對象(類中的數(shù)據(jù)是抽象類生命的對象)double height;Pillar (Geometry bottom,double height){this.bottom=bottom;this.height=height;}public double getVolume(){return bottom.getArea()*height;//bottom可以調(diào)用子類重寫的getArea()方法。}
}
//下列Circle和Rectangle 類都是Gmometry的子類,二者都必須重寫getArea()方法,來計算各自的面積
//Circle.java
public class Circle extends Geometry{double r;Circle(int r){this.r=r;}public double getArea(){return 3.14*r*r;}
}
//Rectangle.java
public class Rectangle extends Geometey{double a,b;Rectangle(double a,double b){this.a=a;this.b=b;}public class getArea(){return a*b;}
}
//APPlication.java
public class Application{public static void main(String[] args){Pillar pillar;Geometry bottom;bottom=new Rectangle(12,22);//上轉(zhuǎn)型對象pillar=new Pillar(bottom,58);//pillar是具有矩形底的柱體System.out.println("矩形體的主體體積"+pillar.getVolume());bottom=new Circle(10);pillar=new Pillar(bottom,58);System.out.println("圓形體的主體體積:"+pillar.getVolume());}
}/*開-閉原則* 就是讓設(shè)計的系統(tǒng)對擴(kuò)展開放,對修改關(guān)閉* 本質(zhì)就是當(dāng)系統(tǒng)中增加模塊的時候,不需要修改現(xiàn)有的模塊。* 再設(shè)計系統(tǒng)時,首先考慮到用戶需求的變化,將對用戶變化的部分設(shè)計為對擴(kuò)展開放,而設(shè)計的核心部分是指經(jīng)過精心考慮之后確定的基本結(jié)構(gòu),這部分對修改是關(guān)閉的,既不能因為用戶需求的變化而發(fā)生改變,因為這部分不是用來應(yīng)對需求變化的。* 如果系統(tǒng)遵守了開-閉原則,那么系統(tǒng)一定是利于維護(hù)的。*/
//設(shè)計一格 動物模擬器,希望設(shè)計的模擬器可以模擬很多動物的聲音
//Animal.java
public abstract class Animal{public abstract void cry();public abstract String getAnimalNmae();
}
//Simulator.java
public class Simulator{public void palySound(Animal animal){System.out.println("現(xiàn)在播放"+animal.getAnimalNmae()+"類的聲音: ");animal.cry();}
}
//dog.java
public class Dog extends Animal{public void cry(){System.out.println("wang...wang");}public String getAnimalName(){return "dog";}
}
//cat.java
public class Cat extends Animal{public void cry(){System.out.println("meo..meo");}public String getAnimalName(){return "cat";}
}
public class Application{public static void main(String[] args){Simulator simulator=new Simulator();simulator.playSound(new Dog());simulator.playSound(new Cat());}
}
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
- 上一篇: How far away ? HDU -
- 下一篇: Java大数,高精度