黑马程序员技术交流社区
标题:
关于Java程序中abstract类和abstract方法的总结
[打印本页]
作者:
棉/mg花/x糖
时间:
2013-5-21 18:06
标题:
关于Java程序中abstract类和abstract方法的总结
本帖最后由 棉/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);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2