引言
實例圖片
如上圖慷垮,二維圖形類有三個子類揖闸,分別是正方形類,三角形類料身,圓形類汤纸;
我們都知道要求正方形的面積,直接使用面積公式邊長的平方即可芹血,同理三角形的是底乘高除以2贮泞,圓的面積是乘以半徑的平方。那么二維圖形的面積該怎么算呢幔烛?我們無法給出一個通用的方式啃擦。那么二維圖形就不能計算面積了嗎?不是的饿悬。只要是二維平面的圖形令蛉,就可以計算面積,只是沒有一個通用的公式而已乡恕。由此可見正方形言询,三角形俯萎,圓形的面積可以很具體的給出,但是二維圖形不能运杭,因為它很抽象夫啊。
由此可得二維圖形類的面積計算應該是抽象的,是抽象方法辆憔。
如果類中的某個方法撇眯,無法具體的給出,它就該是個抽象方法虱咧。
抽象方法的定義
Java中普通方法的定義方式是
訪問權(quán)限 返回類型 方法名(有參數(shù)填寫參數(shù)熊榛,沒參數(shù)為空){
方法內(nèi)部代碼;
}
因為抽象方法我們無法給出具體的實現(xiàn)腕巡,所以抽象方法的定義與普通方法有所不同玄坦。定義方式如下:
訪問權(quán)限 abstract 返回類型 方法名(有參數(shù)填寫參數(shù),沒參數(shù)為空);
注意:因為不知如何實現(xiàn)绘沉,所以沒有大括號了煎楣。
抽象方法的使用
抽象方法必須聲明在抽象類中。
抽象類的定義方式如下:
訪問權(quán)限 abstract class 類名{
}
子類在繼承抽象類時车伞,必須覆蓋重寫全部的抽象方法择懂。(也叫實現(xiàn)方法)
我們可以寫一下引言中的例子:
二維圖形類定義如下:
package com.sjdwz;
/**
* @Description 二維圖形類,抽象類另玖,有計算面積的抽象方法
* @Date 2022/3/15
* @Created by 隨機的未知 sjdwz.com
*/
public abstract class Graphics2D {
public abstract double getArea();
}
正方形類的定義如下:
package com.sjdwz;
/**
* @Description 正方形類
* @Date 2022/3/15
* @Created by 隨機的未知 sjdwz.com
*/
public class Square extends Graphics2D{
//邊長
private int length = 6;
//重寫父類計算面積的方法
@Override
public double getArea() {
return this.length * this.length;
}
}
圓形類的定義如下:
package com.sjdwz;
/**
* @Description 圓形類
* @Date 2022/3/15
* @Created by 隨機的未知 sjdwz.com
*/
public class Circle extends Graphics2D{
//半徑長
private int radius = 6;
//重寫父類計算面積的方法
@Override
public double getArea() {
return 3.14 * this.radius * this.radius;
}
}
測試類的定義如下:
package com.sjdwz;
/**
* @Description 測試類
* @Date 2022/3/15
* @Created by 隨機的未知 sjdwz.com
*/
public class Test {
public static void main(String[] args) {
Square square = new Square();
Triangle triangle = new Triangle();
Circle circle = new Circle();
System.out.println("正方形的面積時"+square.getArea());
System.out.println("三角形的面積時"+triangle.getArea());
System.out.println("圓形的面積時"+circle.getArea());
}
}
注意事項
關于抽象類和抽象方法有如下注意事項:
- 抽象類不能創(chuàng)建對象
抽象類的對象困曙,調(diào)用該抽象對象抽象方法,但是抽象方法沒有具體實現(xiàn)谦去,調(diào)用起來沒有任何意義慷丽; - 抽象類中可以有構(gòu)造方法,可供子類創(chuàng)建對象時哪轿,初始化父類成員使用
子類的構(gòu)造方法之中盈魁,是有默認的super()方法的,所以需要訪問父類的構(gòu)造方法窃诉,那么父類的構(gòu)造方法需要存在; - 抽象類中赤套,并不一定要包含抽象方法飘痛,但是抽象方法所在的類必須時抽象類
沒有包含抽象方法的抽象類,目的是不想讓調(diào)用者創(chuàng)建該對象容握,通常用于某些特殊的類結(jié)構(gòu)設計宣脉; - 抽象類的子類,必須重寫抽象父類的所有抽象方法剔氏,除非子類也是抽象類
如果子類不重寫所有抽象方法塑猖,那么子類中還包含抽象方法竹祷,還應該是抽象類。