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