詳解Java語言中的抽象類與繼承
一、實驗?zāi)康?/h2>
1、掌握抽象類的設(shè)計;
2、掌握抽象方法方法的實現(xiàn);
3、熟悉類的向下向上轉(zhuǎn)型,以及子類實例化父類對象的基本要求;
4、掌握通過類的繼承實現(xiàn)抽象類。
二、實驗要求
(一)編寫一個Shape抽象類,其中包含有:
1個成員變量:表示長度,數(shù)據(jù)類型為double。當類為Circle時,表示半徑;當類為Square時,表示其邊長; 2個抽象方法area()、perimeter(),分別用于計算圖形的面積、周長。
public abstract class Shape{ private double length; // 定義一個私有的成員變量 public double getLength() { // 定義一個方法 getLength() 返回長度值 return length; } public void setLength(double length) { // 定義一個方法 setLength() 獲得長度值 this.length = length; } public abstract double area(); // 定義一個抽象方法 area(),求面積 public abstract double perimeter(); // 定義一個抽象方法,求周長 }
(二)設(shè)計類Circle(圓形)和類Square(正方形),實現(xiàn)抽象類Shape中的所有抽象方法,其中計算圓的面積、周長時,π可以直接引用Math.PI。
class Circle extends Shape{ // 定義一個實現(xiàn)抽象類 Circle 圓形,繼承自抽象類 Shape @Override public double area() { // 實現(xiàn)抽象類中的 area() 方法 return Math.PI * getLength() * getLength(); // 返回圓的面積 } @Override public double perimeter() { // 實現(xiàn)抽象類中的 perimeter() 方法 return 2 * Math.PI * getLength(); // 返回圓的周長 } } class Square extends Shape{ // 定義一個實現(xiàn)抽象類 Square 方形,繼承自抽象類 Shape @Override public double area() { // 實現(xiàn)抽象類中的 area() 方法 return getLength() * getLength(); // 返回方形的面積 } @Override public double perimeter() { // 實現(xiàn)抽象類中的 perimeter() 方法 return 4 * getLength(); // 返回方形的邊長 } }
(三)創(chuàng)建一個包含main方法的Test類,測試相關(guān)的類和抽象類。
class Test{ // 定義一個測試類 public static void main(String[] args) { // 主入口函數(shù) Shape circle = new Circle(); // 定義一個Shape 類型的circle對象,用Circle類進行實例化 circle.setLength(3); // 傳入?yún)?shù) System.out.println("圓的半徑為:" + circle.getLength()); System.out.println("圓的面積為:" + circle.area()); System.out.println("圓的周長為:" + circle.perimeter()); Shape square = new Square(); // 定義一個Shape 類型的square對象,用Square類進行實例化 square.setLength(3); // 傳入?yún)?shù) System.out.println("正方形的邊長為為:" + square.getLength()); System.out.println("正方形的面積為:" + square.area()); System.out.println("正方形的周長為:" + square.perimeter()); } }
全部代碼展示
package experiment11.java; public abstract class Shape{ private double length; // 定義一個私有的成員變量 public double getLength() { // 定義一個方法 getLength() 返回長度值 return length; } public void setLength(double length) { // 定義一個方法 setLength() 獲得長度值 this.length = length; } public abstract double area(); // 定義一個抽象方法 area(),求面積 public abstract double perimeter(); // 定義一個抽象方法,求周長 } class Circle extends Shape{ // 定義一個實現(xiàn)抽象類 Circle 圓形,繼承自抽象類 Shape @Override public double area() { // 實現(xiàn)抽象類中的 area() 方法 return Math.PI * getLength() * getLength(); // 返回圓的面積 } @Override public double perimeter() { // 實現(xiàn)抽象類中的 perimeter() 方法 return 2 * Math.PI * getLength(); // 返回圓的周長 } } class Square extends Shape{ // 定義一個實現(xiàn)抽象類 Square 方形,繼承自抽象類 Shape @Override public double area() { // 實現(xiàn)抽象類中的 area() 方法 return getLength() * getLength(); // 返回方形的面積 } @Override public double perimeter() { // 實現(xiàn)抽象類中的 perimeter() 方法 return 4 * getLength(); // 返回方形的邊長 } } class Test{ // 定義一個測試類 public static void main(String[] args) { // 主入口函數(shù) Shape circle = new Circle(); // 定義一個Shape 類型的circle對象,用Circle類進行實例化 circle.setLength(3); // 傳入?yún)?shù) System.out.println("圓的半徑為:" + circle.getLength()); System.out.println("圓的面積為:" + circle.area()); System.out.println("圓的周長為:" + circle.perimeter()); Shape square = new Square(); // 定義一個Shape 類型的square對象,用Square類進行實例化 square.setLength(3); // 傳入?yún)?shù) System.out.println("正方形的邊長為為:" + square.getLength()); System.out.println("正方形的面積為:" + square.area()); System.out.println("正方形的周長為:" + square.perimeter()); } }
三、實驗報告要求
1、按照程序編寫、調(diào)試、測試過程,在實驗報告中體現(xiàn)全部源代碼、基本調(diào)試過程、和最終的運行結(jié)果(原始屏幕)。
2、程序運行結(jié)束,在源代碼目錄中執(zhí)行Dir命令,把Dir執(zhí)行結(jié)果作為報告的最后部分提交。
四、實驗小結(jié)
抽象類同類相似,只是在設(shè)置方法時,沒有方法體的方法要在修飾符后加abstract,實現(xiàn)抽象類如果沒有完全實現(xiàn)抽象類中的方法,那么它仍然是一個抽象類,依然要用abstract來修飾。
在主函數(shù)中實例化類中,父類類型的變量用子類實例化時,此變量可以擁有父類的屬性和方法。
對象調(diào)用的方法如果已經(jīng)被子類重寫過了則調(diào)用的是子類中重寫的方法,而不是父類中的方法;
如果想要調(diào)用子類中和父類同名的成員變量,則必須通過getter方法或者setter方法;
如果想調(diào)用子類中和父類同名的靜態(tài)方法,直接子類 “類名點” 操作獲取,不要通過對象獲??;
到此這篇關(guān)于詳解Java語言中的抽象類與繼承的文章就介紹到這了,更多相關(guān)Java抽象類 繼承內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JDK1.8源碼下載及idea2021導(dǎo)入jdk1.8源碼的詳細步驟
這篇文章主要介紹了JDK1.8源碼下載及idea2021導(dǎo)入jdk1.8源碼的詳細步驟,在文章開頭就給大家分享了JDK1.8源碼下載地址和下載步驟,告訴大家idea2021.1.3導(dǎo)入JDK1.8源碼步驟,需要的朋友可以參考下2022-11-11Java如何使用Set接口存儲沒有重復(fù)元素的數(shù)組
Set是一個繼承于Collection的接口,即Set也是集合中的一種。Set是沒有重復(fù)元素的集合,本篇我們就用它存儲一個沒有重復(fù)元素的數(shù)組2022-04-04詳細講解springboot如何實現(xiàn)異步任務(wù)
異步:異步與同步相對,當一個異步過程調(diào)用發(fā)出后,調(diào)用者在沒有得到結(jié)果之前,就可以繼續(xù)執(zhí)行后續(xù)操作。也就是說無論異步方法執(zhí)行代碼需要多長時間,跟主線程沒有任何影響,主線程可以繼續(xù)向下執(zhí)行2022-04-04SpringBoot整合Redis實現(xiàn)登錄失敗鎖定功能(實例詳解)
本文我們已經(jīng)探討如何利用Redis來實現(xiàn)鎖定賬戶的安全措施,以及通過SpringBoot整合Redis實現(xiàn)了這一功能,感興趣的朋友跟隨小編一起學習下吧2024-02-02dubbo如何設(shè)置連接zookeeper權(quán)限
這篇文章主要介紹了dubbo如何設(shè)置連接zookeeper權(quán)限問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05Java并發(fā)編程Semaphore計數(shù)信號量詳解
這篇文章主要介紹了Java并發(fā)編程Semaphore計數(shù)信號量詳解,具有一定參考價值,需要的朋友可以了解下。2017-10-10