詳解Java語言中的抽象類與繼承
一、實驗目的
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)文章
如何實現(xiàn)Java中一個簡單的LinkedList
LinkedList與ArrayList都是List接口的具體實現(xiàn)類。下面將介紹如何實現(xiàn)一個簡單的LinkedList,具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02
springboot整合shardingjdbc實現(xiàn)分庫分表最簡單demo
我們知道分庫分表是針對某些數(shù)據(jù)量持續(xù)大幅增長的表,比如用戶表、訂單表等,而不是一刀切將全部表都做分片,這篇文章主要介紹了springboot整合shardingjdbc實現(xiàn)分庫分表最簡單demo,需要的朋友可以參考下2021-06-06
shrio中hashedCredentialsMatcher密碼匹配示例詳解
shrio是一個輕量級權(quán)限管理框架,密碼的匹配由框架內(nèi)部完成。密碼是否匹配由接口CredentialsMatcher定義實現(xiàn)類完成,CredentialsMatcher實現(xiàn)類有SimpleCredentialsMatcher和HashedCredentialsMatcher兩個2021-10-10

