抽象类的定义及运用

来源:互联网 发布:好的南方二本院校知乎 编辑:程序博客网 时间:2024/06/13 06:26

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);}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71

可以看出,类Square、类Circle及类Triangle都由抽象类Shape派生而来,它们都实现了getArea 和getPerimeter抽象方法。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小车驾照过期了怎么办 本地驾驶证掉了怎么办 摩托车驾照脱审怎么办 驾驶证撕坏了怎么办 个体营业执照掉了怎么办 天津驾照丢了怎么办 东莞行驶证丢失怎么办 信用社存折丢了怎么办 没有存折和密码怎么办 行驶证没有照片怎么办 驾证吊销了怎么办 吊销驾照后开车怎么办 外地办行驶证怎么办 驾照考试没过怎么办 驾照考爆了怎么办 考驾照老是不过怎么办 考驾照没时间怎么办 驾照不退学费怎么办 驾照报名费不退怎么办 货车撞人保险金额不够怎么办 科目三不懂灯光怎么办 驾照忘记换证怎么办 小车驾驶证丢了怎么办 天津河西区驾驶证过期怎么办 b2证年审过期怎么办 武汉社保卡到期怎么办 杭州市民卡过期怎么办 外地驾驶证脱审怎么办 没有驾驶证脱审怎么办 驾驶证过期一个月怎么办 有证忘带驾驶证怎么办 a2驾驶证吊销了怎么办 驾照逾期一个月怎么办 驾驶证6年换证过期怎么办 汽车警报一直响怎么办 c1驾照过期半年怎么办 b2逾期未年审怎么办 车祸对方全责该怎么办 驾驶证过期未年审怎么办 驾驶证逾期未年审怎么办 驾驶员从业资格证过期怎么办