廖雪峰Java2面向對象編程-4抽象類和接口-1抽象類
阿新 • • 發佈:2019-01-16
無法執行 ava 否則 radi rri str rect new args
每個子類都可以覆寫父類的方法
如果父類的方法沒有實際意義,能否去掉方法的執行語句?子類會報編譯錯誤
如果去掉父類的方法,就失去了多態的特性
可以把父類的方法聲明為抽象方法。
如果一個class定義了方法,但沒有具體執行代碼,這個方法就是抽象方法:
- 抽象方法用abstract修飾
- 抽象方法沒有任何執行語句
- 因為無法執行抽象方法,因此這個類也必須聲明為抽象類abstract class
- 無法實例化一個抽象類。如果子類不是抽象類,依舊可以被實例化。
抽象類作用:
- 抽象類用於被繼承
- 抽象類可以強迫子類實現其定義的抽象方法,否則編譯錯誤
- 抽象方法實際上相當於定義了規範。
面向抽象編程的本質:
- 上層代碼只定義規範 abstract class Person
- 不需要子類就可以實現業務邏輯(正常編譯)
- 具體的業務邏輯由不同的子類實現,調用者並不關心
Shape.java
public abstract class Shape {
//抽象方法,用於計算面積
public abstract double area();
}
Rect.java
public class Rect extends Shape{ private final double width; private final double height; public Rect(double width, double height){ this.height = height; this.width = width; } @Override public double area() { return width * height; } }
Circle.java
public class Circle extends Shape{
private double radius;
public Circle(double radius){
this.radius = radius;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
}
Hello.java
public class Hello { public static void main(String[] args){ Shape s1 = new Rect(200,100); Shape s2 = new Circle(60); System.out.println(s1.area()); System.out.println(s2.area()); } }
總結:
- 抽象方法定義了子類必須實現的接口規範
- 定義了抽象方法的類就是抽象類
- 從抽象類繼承的子類必須實現抽象方法
- 如果不實現抽象方法,該子類仍是一個抽象類
廖雪峰Java2面向對象編程-4抽象類和接口-1抽象類