首頁 > 軟體

詳解Java語言中的抽象類與繼承

2022-10-22 14:00:10

一、實驗目的

1、掌握抽象類的設計;

2、掌握抽象方法方法的實現;

3、熟悉類的向下向上轉型,以及子類範例化父類別物件的基本要求;

4、掌握通過類的繼承實現抽象類。

二、實驗要求

(一)編寫一個Shape抽象類,其中包含有:

1個成員變數:表示長度,資料型別為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();    // 定義一個抽象方法,求周長
}

(二)設計類Circle(圓形)和類Square(正方形),實現抽象類Shape中的所有抽象方法,其中計算圓的面積、周長時,π可以直接參照Math.PI。

class Circle extends Shape{ // 定義一個實現抽象類 Circle 圓形,繼承自抽象類 Shape
    @Override
    public double area() {  // 實現抽象類中的 area() 方法
        return Math.PI * getLength() * getLength(); // 返回圓的面積
    }

    @Override
    public double perimeter() { // 實現抽象類中的 perimeter() 方法
        return 2 * Math.PI * getLength();   // 返回圓的周長
    }
}

class Square extends Shape{ // 定義一個實現抽象類 Square 方形,繼承自抽象類 Shape
    @Override
    public double area() {  // 實現抽象類中的 area() 方法
        return getLength() * getLength();   // 返回方形的面積
    }

    @Override
    public double perimeter() { // 實現抽象類中的 perimeter() 方法
        return 4 * getLength(); // 返回方形的邊長
    }
}

(三)建立一個包含main方法的Test類,測試相關的類和抽象類。

class Test{ // 定義一個測試類
    public static void main(String[] args) {    // 主入口函數
        Shape circle = new Circle();    // 定義一個Shape 型別的circle物件,用Circle類進行範例化
        circle.setLength(3);    // 傳入引數
        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);    // 傳入引數
        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{ // 定義一個實現抽象類 Circle 圓形,繼承自抽象類 Shape
    @Override
    public double area() {  // 實現抽象類中的 area() 方法
        return Math.PI * getLength() * getLength(); // 返回圓的面積
    }

    @Override
    public double perimeter() { // 實現抽象類中的 perimeter() 方法
        return 2 * Math.PI * getLength();   // 返回圓的周長
    }
}

class Square extends Shape{ // 定義一個實現抽象類 Square 方形,繼承自抽象類 Shape
    @Override
    public double area() {  // 實現抽象類中的 area() 方法
        return getLength() * getLength();   // 返回方形的面積
    }

    @Override
    public double perimeter() { // 實現抽象類中的 perimeter() 方法
        return 4 * getLength(); // 返回方形的邊長
    }
}

class Test{ // 定義一個測試類
    public static void main(String[] args) {    // 主入口函數
        Shape circle = new Circle();    // 定義一個Shape 型別的circle物件,用Circle類進行範例化
        circle.setLength(3);    // 傳入引數
        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);    // 傳入引數
        System.out.println("正方形的邊長為為:" + square.getLength());
        System.out.println("正方形的面積為:" + square.area());
        System.out.println("正方形的周長為:" + square.perimeter());
    }
}

三、實驗報告要求

1、按照程式編寫、偵錯、測試過程,在實驗報告中體現全部原始碼、基本偵錯過程、和最終的執行結果(原始螢幕)。

2、程式執行結束,在原始碼目錄中執行Dir命令,把Dir執行結果作為報告的最後部分提交。

四、實驗小結

抽象類同類相似,只是在設定方法時,沒有方法體的方法要在修飾符後加abstract,實現抽象類如果沒有完全實現抽象類中的方法,那麼它仍然是一個抽象類,依然要用abstract來修飾。

在主函數中範例化類中,父類別型別的變數用子類範例化時,此變數可以擁有父類別的屬性和方法。

物件呼叫的方法如果已經被子類重寫過了則呼叫的是子類中重寫的方法,而不是父類別中的方法;

如果想要呼叫子類中和父類別同名的成員變數,則必須通過getter方法或者setter方法;

如果想呼叫子類中和父類別同名的靜態方法,直接子類 “類名點” 操作獲取,不要通過物件獲取;

到此這篇關於詳解Java語言中的抽象類與繼承的文章就介紹到這了,更多相關Java抽象類 繼承內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com