1. 程式人生 > >java抽象類的使用

java抽象類的使用

限制 創建 特點 mod nal circle 增加 port 成員方法

/*
當多個類中出現相同功能,但是功能主體不同,
這是可以進行向上抽取。這時,只抽取功能定義,而不抽取功能主體。

抽象:看不懂。

抽象類的特點:
1,抽象方法一定在抽象類中。
2,抽象方法和抽象類都必須被abstract關鍵字修飾。
3,抽象類不可以用new創建對象。因為調用抽象方法沒意義。
4,抽象類中的抽象方法要被使用,必須由子類復寫起所有的抽象方法後,建立子類對象調用。
如果子類只覆蓋了部分抽象方法,那麽該子類還是一個抽象類。

Java抽象類的定:java抽象類體現數據抽象的思想,是實現程序多態性的一種手段。也提到抽象類與抽象方法的限制,下面我們會通過一下java抽象類小示例來給你介紹抽象類的用法。希望對你有所幫助。

假設我們要編寫一個計算矩形、三角形和圓的面積與周長的程序,若按前面所學的方式編程,我們必須定義四個類:圓類、三角形類、矩形類和使用前三個類的公共類,它們之間沒有繼承關系.

程序寫好後雖然能執行,但從程序的整體結構上看,三個類之間的許多共同屬性和操作在程序中沒有很好地被利用,需要重復編寫代碼,降低了程序的開發效率,且使出現錯誤的機會增加。

仔細分析上面例子中的三個類,可以看到這三個類都要計算面積與周長,雖然公式不同但目標相同。因此,我們可以為這三個類抽象出一個父類,在父類裏定義圓、三角形和矩形三個類共同的數據成員及成員方法。把計算面積與周長的成員方法名放在父類給予說明,再將具體的計算公式在子類中實現.

這樣,我們通過父類就大概知道子類所要完成的任務,而且,這些方法還可以應用於求解平行四邊形、梯形等圖形的周長與面積。這種結構就是抽象類的概念。
Java程序用抽象類(abstract class)來實現自然界的抽象概念。抽象類的作用在於將許多有關的類組織在一起,提供一個公共的類,即抽象類,而那些被它組織在一起的具體的類將作為它的子類由它派生出來。抽象類刻畫了公有行為的特征,並通過繼承機制傳送給它的派生類。

在各子類繼承了父類的抽象方法之後,再分別用不同的語句和方法體來重新定義它,形成若幹個名字相同,返回值相同,參數列表也相同,目的一致但是具體實現有一定差別的方法。抽象類中定義抽象方法的目的是實現一個接口,即所有的子類對外都呈現一個相同名字的方法。抽象類是它的所有子類的公共屬性的集合,是包含一個或多個抽象方法的類。使用抽象類的一大優點就是可以充分利用這些公共屬性來提高開發和維護程序的效率。對於抽象類與抽象方法的限制如下:

 (1)凡是用abstract 修飾符修飾的類被稱為抽象類。凡是用abstract修飾符修飾的成員方法被稱為抽象方法。
 (2)抽象類中可以有零個或多個抽象方法,也可以包含非抽象的方法。
 (3)抽象類中可以沒有抽象方法,但是,有抽象方法的類必須是抽象類。
 (4)對於抽象方法來說,在抽象類中只指定其方法名及其類型,而不書寫其實現代碼。
 (5)抽象類可以派生子類,在抽象類派生的子類中必須實現抽象類中定義的所有抽象方法。
 (6)抽象類不能創建對象,創建對象的工作由抽象類派生的子類來實現。
 (7)如果父類中已有同名的abstract方法,則子類中就不能再有同名的抽象方法。
 (8)abstract不能與final並列修飾同一個類。
 (9)abstract 不能與private、static、final或native並列修飾同一個方法。
Java抽象類應用示例程序Test.java 如下:

public abstract class Shapes {
public int x, y;
public int width, height;
public Shapes(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
abstract double getArea();
abstract double getPerimeter();
}

public class Circle extends Shapes {
public double r;
public double getArea() {
return (r * r * Math.PI);
}
public double getPerimeter() {
return (2 * Math.PI * r);
}
public Circle(int x, int y, int width, int heigh) {
super(x, y, width, heigh);
r = (double) width / 2.0;
}
}

public class Square extends Shapes {
public double getArea() {
return (width * height);
}
public double getPerimeter() {
return (2 * width + 2 * height);
}
public Square(int x, int y, int width, int height) {
super(x, y, width, height);
}
}

public class Triangle extends Shapes {
public double c;
public double getArea() {
return (0.5 * width * height);
}
public double getPerimeter() {
return (width + height + c);
}
public Triangle(int x, int y, int base, int height) {
super(x, y, base, height);
c = Math.sqrt(width * width + height * height);
}
}

import java.applet.Applet;
import java.awt.Graphics;

public class Test extends Applet {
Square Box = new Square(5, 15, 25, 25);
Triangle tri = new Triangle(5, 50, 8, 4);
Circle Oval = new Circle(5, 90, 25, 25);

public void paint(Graphics g) {
g.drawRect(Box.x, Box.y, Box.width, Box.height);
g.drawString("Box Area:" + Box.getArea(), 50, 35);
g.drawString("Box Perimeter:" + Box.getPerimeter(), 50, 55);
g.drawString("tri Area:" + tri.getArea(), 50, 75);
g.drawString("tri Perimeter:" + tri.getPerimeter(), 50, 95);
g.drawOval(Oval.x, Oval.y, Oval.width, Oval.height);
g.drawString("oval Area:" + Oval.getArea(), 50, 115);
}
}

可以看出,類Square、類Circle及類Triangle都由抽象類Shape派生而來,它們都實現了getArea 和getPerimeter抽象方法。

java抽象類的使用