請(qǐng)seo的人幫做網(wǎng)站排名搜索引擎內(nèi)部?jī)?yōu)化
?我們先來(lái)看一道題!
計(jì)算幾何對(duì)象的面積之和)編寫(xiě)一個(gè)方法,該方法用于計(jì)算數(shù)組中所有幾何對(duì)象的面積之和。該方法的簽名是:
public static double sumArea(GeometricObject[] a)
編寫(xiě)一個(gè)測(cè)試程序,該程序創(chuàng)建一個(gè)包含四個(gè)對(duì)象(兩個(gè)圓形和兩個(gè)矩形)的數(shù)組,并使用?
sumArea
?方法計(jì)算它們的總面積。
直接看代碼,解釋全都有!?
//抽象類(lèi)使用abstract關(guān)鍵字來(lái)聲明
abstract class GeometricObject {// 假設(shè)這里有一些公共的屬性或方法// ...// 抽象方法,子類(lèi)需要實(shí)現(xiàn).抽象方法只有方法簽名,沒(méi)有方法體。public abstract double getArea();//如果一個(gè)類(lèi)中包含抽象方法,那么這個(gè)類(lèi)必須被聲明為抽象類(lèi)。
}// Circle 類(lèi),繼承自 GeometricObject
class Circle extends GeometricObject {private double radius;public Circle(double radius) {this.radius = radius;}//抽象方法不能被直接調(diào)用,只能通過(guò)子類(lèi)繼承并實(shí)現(xiàn)該方法后才能被調(diào)用。@Overridepublic double getArea() {return Math.PI * Math.pow(radius, 2);}
}// Rectangle 類(lèi),繼承自 GeometricObject
class Rectangle extends GeometricObject {private double width;private double height;public Rectangle(double width, double height) {this.width = width;this.height = height;}@Overridepublic double getArea() {return width * height;}
}// 主類(lèi),包含 sumArea 方法和測(cè)試程序
public class Main1 {// sumArea 方法,計(jì)算所有幾何對(duì)象的面積之和
//GeometricObject類(lèi)型數(shù)組apublic static double sumArea(GeometricObject[] a) {double sum = 0;for (GeometricObject obj : a) {sum += obj.getArea();}
//for-each 循環(huán)來(lái)遍歷數(shù)組或集合時(shí), obj 實(shí)際上是一個(gè)臨時(shí)變量,用于在每次迭代中存儲(chǔ)當(dāng)前正在處理的元素。return sum;}// 測(cè)試程序public static void main(String[] args) {// 創(chuàng)建四個(gè)幾何對(duì)象:兩個(gè)圓形和兩個(gè)矩形GeometricObject[] objects = {new Circle(5), // 半徑為5的圓形new Circle(10), // 半徑為10的圓形new Rectangle(4, 6), // 寬為4,高為6的矩形new Rectangle(10, 5) // 寬為10,高為5的矩形};// 計(jì)算總面積并打印double totalArea = sumArea(objects);System.out.println("Total area: " + totalArea);}
}
?補(bǔ)充一個(gè)小知識(shí):
在面向?qū)ο缶幊讨?#xff0c;一個(gè)基類(lèi)的數(shù)組(或集合)可以存儲(chǔ)其子類(lèi)對(duì)象的引用,這是因?yàn)樽宇?lèi)繼承了基類(lèi)的所有公共和非final保護(hù)屬性和方法(取決于具體的繼承規(guī)則和訪問(wèn)修飾符)。因此,當(dāng)你創(chuàng)建一個(gè)基類(lèi)的數(shù)組時(shí),你實(shí)際上是在聲明一個(gè)可以存儲(chǔ)該基類(lèi)或其任何子類(lèi)對(duì)象的引用的容器。
由于Circle
和Rectangle
都是GeometricObject
的子類(lèi),它們可以被視為特殊的GeometricObject
。因此,你可以在一個(gè)GeometricObject
類(lèi)型的數(shù)組中存儲(chǔ)Circle
和Rectangle
對(duì)象的引用。當(dāng)你調(diào)用這些對(duì)象的方法時(shí),如果方法是在GeometricObject
中定義的,那么就會(huì)調(diào)用基類(lèi)中的實(shí)現(xiàn);如果方法是在子類(lèi)中重寫(xiě)的(override),那么就會(huì)調(diào)用子類(lèi)中的實(shí)現(xiàn)(這就是多態(tài)性的一個(gè)表現(xiàn))。
子類(lèi)中的方法,父類(lèi)不能直接使用,除非這些方法是通過(guò)繼承從父類(lèi)獲得的
類(lèi)可以調(diào)用繼承自父類(lèi)的方法,但不能直接使用子類(lèi)新增的方法