抽象概念的引入是方便人们对事物的分类理解
面向对象的程序世界与现实世界是一致的。
Java表达抽象概念采用抽象类。
Java表达抽象行为能力用接口。
8.1.1 抽象类的定义
abstract class 类名称
{
成员变量;
方法(){……} //一般方法
abstract 方法(); //抽象方法
}
- 在抽象类中可以包含一般方法和抽象方法。
- 抽象类表示的是一个抽象概念,不能被实例化为对象。
- 抽象类具体应用时需要继承。
8.1.2 抽象类的应用
例8-1 定义一个代表“形状”的抽象类,其中包括求形状面积的抽象方法。继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存入一个数组中,访问数组元素将各类图形的面积输出。
abstract class Shape { //定义抽象类abstract public double area(); //抽象方法}class Triangle extends Shape { //定义三角型private double a, b, c;public Triangle(double a, double b, double c) {this.a = a;this.b = b;this.c = c;}public double area(){double p = (a + b +c) / 2;return Math.sqrt(p * (p - a) * (p- b) * (p- c));}}class Rectangle extends Shape { //定义矩形private double width, height;public Rectangle(double j, double k) {width = j;height = k;}public double area() {return width * height;}}class Circle extends Shape { //定义圆private double r;public Circle(double r) {this.r = r;}public double area() {return Math.PI * r * r;}}public class Test{public static void main(String args[]){Shape s[] = new Shape[3];s[0] = new Triangle(25, 41, 50);s[1] = new Rectangle(15,20);s[2] = new Circle(47);for (int k= 0; k < s.length; k ++)System.out.println( s[k].area() );//根据指向的具体对象求形状面积}}例1:abstract class MineBase {abstract void amethod( );static int i;}public class Mine extends MineBase{public static void main(String argv[ ]){int[ ] ar = new int[5];for (i = 0;i < ar.length;i++)System.out.println(ar[i]);}}A.输出5个0;B.编译错误: ar 未初始化就使用;$C.编译错误: 抽象方法未在Mine中实现;D.运行错误, i超出数组下标范围。例2:abstract class P{public P() { System.out.println("parent"); }abstract void m();}class S extends P {public S() { System.out.println("child"); }public static void main(String a[ ]) {P x= new S();//用父类引用访问子类对象实例时,先执行父类构造方法,再执行子类的。x.m();}void m(){System.out.println("m()");}}/*运行结果:parentchildm()*/
