本帖最后由 棉/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- package com.yb.DrawPolygon;
- import java.applet.Applet;
- import java.awt.Graphics;
- abstract class Shapes {
- public int x,y; //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(); //求图形周长的抽象方法
- }
- class Square extends Shapes { //由抽象类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);
- }
- }
- class Triangle extends Shapes { //由抽象类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);
- }
- }
- class Circle extends Shapes { //由抽象类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 height) {
- super(x,y,width,height);
- r = (double)width/2.0;
- }
- }
- @SuppressWarnings("serial")
- public class DrawPolygon 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:"+box.getArea(), 50, 75);
- g.drawString("Tri Perimeter:"+box.getPerimeter(), 50, 95);
- //画圆,输出其面积和周长
- g.drawOval(oval.x, oval.y, oval.width, oval.height);
- g.drawString("Oavl Area:"+oval.getArea(), 50, 115);
- g.drawString("oval Area:"+oval.getPerimeter(), 50, 135);
- }
- }
复制代码 |