詳解Java語(yǔ)言中的抽象類與繼承
一、實(shí)驗(yàn)?zāi)康?/h2>
1、掌握抽象類的設(shè)計(jì);
2、掌握抽象方法方法的實(shí)現(xiàn);
3、熟悉類的向下向上轉(zhuǎn)型,以及子類實(shí)例化父類對(duì)象的基本要求;
4、掌握通過(guò)類的繼承實(shí)現(xiàn)抽象類。
二、實(shí)驗(yàn)要求
(一)編寫一個(gè)Shape抽象類,其中包含有:
1個(gè)成員變量:表示長(zhǎng)度,數(shù)據(jù)類型為double。當(dāng)類為Circle時(shí),表示半徑;當(dāng)類為Square時(shí),表示其邊長(zhǎng); 2個(gè)抽象方法area()、perimeter(),分別用于計(jì)算圖形的面積、周長(zhǎng)。
public abstract class Shape{
private double length; // 定義一個(gè)私有的成員變量
public double getLength() { // 定義一個(gè)方法 getLength() 返回長(zhǎng)度值
return length;
}
public void setLength(double length) { // 定義一個(gè)方法 setLength() 獲得長(zhǎng)度值
this.length = length;
}
public abstract double area(); // 定義一個(gè)抽象方法 area(),求面積
public abstract double perimeter(); // 定義一個(gè)抽象方法,求周長(zhǎng)
}
(二)設(shè)計(jì)類Circle(圓形)和類Square(正方形),實(shí)現(xiàn)抽象類Shape中的所有抽象方法,其中計(jì)算圓的面積、周長(zhǎng)時(shí),π可以直接引用Math.PI。
class Circle extends Shape{ // 定義一個(gè)實(shí)現(xiàn)抽象類 Circle 圓形,繼承自抽象類 Shape
@Override
public double area() { // 實(shí)現(xiàn)抽象類中的 area() 方法
return Math.PI * getLength() * getLength(); // 返回圓的面積
}
@Override
public double perimeter() { // 實(shí)現(xiàn)抽象類中的 perimeter() 方法
return 2 * Math.PI * getLength(); // 返回圓的周長(zhǎng)
}
}
class Square extends Shape{ // 定義一個(gè)實(shí)現(xiàn)抽象類 Square 方形,繼承自抽象類 Shape
@Override
public double area() { // 實(shí)現(xiàn)抽象類中的 area() 方法
return getLength() * getLength(); // 返回方形的面積
}
@Override
public double perimeter() { // 實(shí)現(xiàn)抽象類中的 perimeter() 方法
return 4 * getLength(); // 返回方形的邊長(zhǎng)
}
}
(三)創(chuàng)建一個(gè)包含main方法的Test類,測(cè)試相關(guān)的類和抽象類。
class Test{ // 定義一個(gè)測(cè)試類
public static void main(String[] args) { // 主入口函數(shù)
Shape circle = new Circle(); // 定義一個(gè)Shape 類型的circle對(duì)象,用Circle類進(jìn)行實(shí)例化
circle.setLength(3); // 傳入?yún)?shù)
System.out.println("圓的半徑為:" + circle.getLength());
System.out.println("圓的面積為:" + circle.area());
System.out.println("圓的周長(zhǎng)為:" + circle.perimeter());
Shape square = new Square(); // 定義一個(gè)Shape 類型的square對(duì)象,用Square類進(jìn)行實(shí)例化
square.setLength(3); // 傳入?yún)?shù)
System.out.println("正方形的邊長(zhǎng)為為:" + square.getLength());
System.out.println("正方形的面積為:" + square.area());
System.out.println("正方形的周長(zhǎng)為:" + square.perimeter());
}
}
全部代碼展示
package experiment11.java;
public abstract class Shape{
private double length; // 定義一個(gè)私有的成員變量
public double getLength() { // 定義一個(gè)方法 getLength() 返回長(zhǎng)度值
return length;
}
public void setLength(double length) { // 定義一個(gè)方法 setLength() 獲得長(zhǎng)度值
this.length = length;
}
public abstract double area(); // 定義一個(gè)抽象方法 area(),求面積
public abstract double perimeter(); // 定義一個(gè)抽象方法,求周長(zhǎng)
}
class Circle extends Shape{ // 定義一個(gè)實(shí)現(xiàn)抽象類 Circle 圓形,繼承自抽象類 Shape
@Override
public double area() { // 實(shí)現(xiàn)抽象類中的 area() 方法
return Math.PI * getLength() * getLength(); // 返回圓的面積
}
@Override
public double perimeter() { // 實(shí)現(xiàn)抽象類中的 perimeter() 方法
return 2 * Math.PI * getLength(); // 返回圓的周長(zhǎng)
}
}
class Square extends Shape{ // 定義一個(gè)實(shí)現(xiàn)抽象類 Square 方形,繼承自抽象類 Shape
@Override
public double area() { // 實(shí)現(xiàn)抽象類中的 area() 方法
return getLength() * getLength(); // 返回方形的面積
}
@Override
public double perimeter() { // 實(shí)現(xiàn)抽象類中的 perimeter() 方法
return 4 * getLength(); // 返回方形的邊長(zhǎng)
}
}
class Test{ // 定義一個(gè)測(cè)試類
public static void main(String[] args) { // 主入口函數(shù)
Shape circle = new Circle(); // 定義一個(gè)Shape 類型的circle對(duì)象,用Circle類進(jìn)行實(shí)例化
circle.setLength(3); // 傳入?yún)?shù)
System.out.println("圓的半徑為:" + circle.getLength());
System.out.println("圓的面積為:" + circle.area());
System.out.println("圓的周長(zhǎng)為:" + circle.perimeter());
Shape square = new Square(); // 定義一個(gè)Shape 類型的square對(duì)象,用Square類進(jìn)行實(shí)例化
square.setLength(3); // 傳入?yún)?shù)
System.out.println("正方形的邊長(zhǎng)為為:" + square.getLength());
System.out.println("正方形的面積為:" + square.area());
System.out.println("正方形的周長(zhǎng)為:" + square.perimeter());
}
}
三、實(shí)驗(yàn)報(bào)告要求
1、按照程序編寫、調(diào)試、測(cè)試過(guò)程,在實(shí)驗(yàn)報(bào)告中體現(xiàn)全部源代碼、基本調(diào)試過(guò)程、和最終的運(yùn)行結(jié)果(原始屏幕)。

2、程序運(yùn)行結(jié)束,在源代碼目錄中執(zhí)行Dir命令,把Dir執(zhí)行結(jié)果作為報(bào)告的最后部分提交。

四、實(shí)驗(yàn)小結(jié)
抽象類同類相似,只是在設(shè)置方法時(shí),沒(méi)有方法體的方法要在修飾符后加abstract,實(shí)現(xiàn)抽象類如果沒(méi)有完全實(shí)現(xiàn)抽象類中的方法,那么它仍然是一個(gè)抽象類,依然要用abstract來(lái)修飾。
在主函數(shù)中實(shí)例化類中,父類類型的變量用子類實(shí)例化時(shí),此變量可以擁有父類的屬性和方法。
對(duì)象調(diào)用的方法如果已經(jīng)被子類重寫過(guò)了則調(diào)用的是子類中重寫的方法,而不是父類中的方法;
如果想要調(diào)用子類中和父類同名的成員變量,則必須通過(guò)getter方法或者setter方法;
如果想調(diào)用子類中和父類同名的靜態(tài)方法,直接子類 “類名點(diǎn)” 操作獲取,不要通過(guò)對(duì)象獲?。?/p>
到此這篇關(guān)于詳解Java語(yǔ)言中的抽象類與繼承的文章就介紹到這了,更多相關(guān)Java抽象類 繼承內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JDK1.8源碼下載及idea2021導(dǎo)入jdk1.8源碼的詳細(xì)步驟
這篇文章主要介紹了JDK1.8源碼下載及idea2021導(dǎo)入jdk1.8源碼的詳細(xì)步驟,在文章開頭就給大家分享了JDK1.8源碼下載地址和下載步驟,告訴大家idea2021.1.3導(dǎo)入JDK1.8源碼步驟,需要的朋友可以參考下2022-11-11
Java如何使用Set接口存儲(chǔ)沒(méi)有重復(fù)元素的數(shù)組
Set是一個(gè)繼承于Collection的接口,即Set也是集合中的一種。Set是沒(méi)有重復(fù)元素的集合,本篇我們就用它存儲(chǔ)一個(gè)沒(méi)有重復(fù)元素的數(shù)組2022-04-04
詳細(xì)講解springboot如何實(shí)現(xiàn)異步任務(wù)
異步:異步與同步相對(duì),當(dāng)一個(gè)異步過(guò)程調(diào)用發(fā)出后,調(diào)用者在沒(méi)有得到結(jié)果之前,就可以繼續(xù)執(zhí)行后續(xù)操作。也就是說(shuō)無(wú)論異步方法執(zhí)行代碼需要多長(zhǎng)時(shí)間,跟主線程沒(méi)有任何影響,主線程可以繼續(xù)向下執(zhí)行2022-04-04
SpringBoot整合Redis實(shí)現(xiàn)登錄失敗鎖定功能(實(shí)例詳解)
本文我們已經(jīng)探討如何利用Redis來(lái)實(shí)現(xiàn)鎖定賬戶的安全措施,以及通過(guò)SpringBoot整合Redis實(shí)現(xiàn)了這一功能,感興趣的朋友跟隨小編一起學(xué)習(xí)下吧2024-02-02
dubbo如何設(shè)置連接zookeeper權(quán)限
這篇文章主要介紹了dubbo如何設(shè)置連接zookeeper權(quán)限問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
java Aop實(shí)現(xiàn)自動(dòng)填充字段值示例
這篇文章主要為大家介紹了Aop實(shí)現(xiàn)自動(dòng)填充字段值示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Java并發(fā)編程Semaphore計(jì)數(shù)信號(hào)量詳解
這篇文章主要介紹了Java并發(fā)編程Semaphore計(jì)數(shù)信號(hào)量詳解,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10

