1.當用abstract來修飾一個類時,這個類就是抽象類。當abstract來修飾一個方法時,這個方法就是抽象方法。
2.含有抽象方法的類必須被定義為抽象類,抽象類必須被繼承,抽象方法必須被重寫
3.抽象類不能被實例化,只能被子類繼承。
4.抽象方法只需聲明,無需實現,抽象方法沒有方法體
例,在同一個包下定義一個Shape.java文件
public abstract class Shape { { System.out.再定義一個Triangle.java文件
public class Triangle extends Shape{ //定義三邊 private double a; private double b; private double c; public Triangle(double a,double b , double c) { this.setSides(a,b,c); } public void setSides(double a, double b , double c){ if (a >= b+c && b >= a + c && c >= b + a) { System.out.println("三角形不合法"); return; } this.a = a; this.b = b; this.c = c; } //重寫父類計算周長的抽象方法 @Override public double calPerimeter() { return a + b + c; } //重寫父類的返回形狀的方法 @Override public String getTyp() { return "三角形"; } public static void main(String[] args) { Shape s1 = new Triangle(3,4,5); //輸出12.0 System.out.println(s1.calPerimeter()); } 抽象類的作用:
/*自己總結的*/
如果不同的子類需要從父類類中調用相同的方法,比如都需要計算周長,從shape父類中調用calPerimeter()方法,但圓(circle)與三角形(triangle)計算周長的方式并不一樣,如果在shape定義一個帶有方法體的非抽象方法,一定不能滿足同時計算圓與三角形周長的要求。如果定義shape為抽象類,calPerimeter為抽象方法,只需要在子類中重寫calPerieter()方法適合自己就行了。/*書本*/
從語義的角度來看抽象類是從多個具體類中抽象出來的父類,它具有更高層次的抽象。從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為其子類的模版,從而避免了子類設計的任意性。
新聞熱點
疑難解答