A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 棉/mg花/x糖 于 2013-5-21 18:30 编辑

关于Java程序中abstract类abstract方法的总结

事实上,对于Java抽象类和抽象方法,是有很多限制的,这里总结如下(10条):
  (1)凡是用abstract修饰符修饰的类称为抽象类;凡是用abstract修饰符修饰的成员方法称为抽象方法
  (2)抽象类可以有零个或多个抽象方法,也可以包含非抽象方法。
  (3)抽象类中可以没有抽象方法,但是,有抽象方法的类一定是抽象类。
  (4)对于抽象方法来说,在抽象类中只指定其方法名及其类型,而不书写其实现代码。
  (5)抽象类可以派生子类,在抽象类派生的子类中必须实现抽象类中定义的所有抽象方法
  (6)抽象类不能创建对象创建对象的工作抽象类派生的子类来实现
  (7)如果父类中已有同名的abstract方法,则子类就不能再有同名的抽象方法。
  (8)abstract不能与final并列修饰同一个类。
  (9)abstract不能与private、static、final或native并列修饰同一个方法。
(10)abstract类中不能有private的数据成员或成员方法。

下面具体举一个例子来说明:DrawPolygon.java
  1. package com.yb.DrawPolygon;

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

  4. abstract class Shapes {
  5.     public int x,y;                                        //x,y为画图坐标
  6.     public int width,height;
  7.     public Shapes(int x,int y,int width,int height) {
  8.         this.x = x;
  9.         this.y = y;
  10.         this.width = width;
  11.         this.height = height;
  12.     }
  13.     abstract double getArea();                             //求图形面积的抽象方法
  14.     abstract double getPerimeter();                        //求图形周长的抽象方法
  15. }

  16. class Square extends Shapes {                              //由抽象类Shapes派生的子类:正方形类
  17.     public double getArea() {
  18.         return(width*height);
  19.     }
  20.     public double getPerimeter() {
  21.         return(2*width+2*height);
  22.     }
  23.     public Square(int x,int y,int width,int height) {
  24.         super(x,y,width,height);
  25.     }
  26. }

  27. class Triangle extends Shapes {                             //由抽象类Shapes派生的子类:三角形类
  28.     public double c;                                        //斜边
  29.     public double getArea() {
  30.         return(0.5*width*height);
  31.     }
  32.     public double getPerimeter() {
  33.         return(width+height+c);
  34.     }
  35.     public Triangle(int x,int y,int base,int height) {
  36.         super(x,y,base,height);
  37.         c = Math.sqrt(width*width+height*height);
  38.     }
  39. }

  40. class Circle extends Shapes {                               //由抽象类Shapes派生的子类:圆形类
  41.     public double r;                                        //半径
  42.     public double getArea() {
  43.         return(r*r*Math.PI);
  44.     }
  45.     public double getPerimeter() {
  46.         return(2*Math.PI*r);
  47.     }
  48.     public Circle(int x,int y,int width,int height) {
  49.         super(x,y,width,height);
  50.         r = (double)width/2.0;
  51.     }
  52. }

  53. @SuppressWarnings("serial")
  54. public class DrawPolygon extends Applet {
  55.     Square box = new Square(5,15,25,25);
  56.     Triangle tri = new Triangle(5,50,8,4);
  57.     Circle oval = new Circle(5,90,25,25);
  58.     public void paint(Graphics g) {
  59.         //画正方形,输出其面积和周长
  60.         g.drawRect(box.x, box.y, box.width, box.height);
  61.         g.drawString("Box Area:"+box.getArea(), 50, 35);
  62.         g.drawString("Box Perimeter:"+box.getPerimeter(), 50, 55);

  63.         //注意:只知道斜边、底边和高,是没法画出三角形的。
  64.         //输出三角形的面积和周长
  65.         g.drawString("Tri Area:"+box.getArea(), 50, 75);
  66.         g.drawString("Tri Perimeter:"+box.getPerimeter(), 50, 95);

  67.         //画圆,输出其面积和周长
  68.         g.drawOval(oval.x, oval.y, oval.width, oval.height);
  69.         g.drawString("Oavl Area:"+oval.getArea(), 50, 115);
  70.         g.drawString("oval Area:"+oval.getPerimeter(), 50, 135);
  71.     }
  72. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马