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抽象方法
|
|