JavaSunMicrotyterJava的面向对象特征(2)ZUST Software Institute
1 Java的面向对象特征(2) ZUST Software Institute
抽象类(abstractclassJAVA一个未完成的类仅仅抽象类可以包含抽象方法(abstractmethods)抽象方法:仅仅申明了方法,但未实现有访问修饰词返回值类型方法名参数列表无方法体2
2 抽象类(abstract class) ◼ 一个未完成的类 ◼ 仅仅抽象类可以包含抽象方法(abstract methods) ◼ 抽象方法: 仅仅申明了方法,但未实现 ◼ 有访问修饰词 ◼ 返回值类型 ◼ 方法名 ◼ 参数列表 ◼ 无方法体
abstractclass Pointintx=1,y=1;JAVAvoid move(int dx, int dy)x += dx;y += dy;alert();抽象方法:有访问修饰词人返回值类型、方法名和abstract voidalertO);参数列表,无方法体1abstract class ColoredPoint extends Point int color;classSimplePointextendsPointvoid alertO 3
3 抽象类举例 abstract class Point { int x = 1, y = 1; void move(int dx, int dy) { x += dx; y += dy; alert(); } abstract void alert(); } abstract class ColoredPoint extends Point { int color; } class SimplePoint extends Point { void alert() { } } 抽象方法: 有访问修饰词、 返回值类型、方法名和 参数列表,无方法体
abstract class ColoredPoint extendsPointint color;JAVA抽象类不能被实例 化, 例Pointp= newPointO;子类继承抽象类时,必须重写抽象方法,否则仍为抽象类class SimplePoint extends PointabstractclassPointvoid alertO int x = 1, y = 1;void move(int dx, int dy)X += dx;Point p = new SimplePointO);y += dy;alert();人abstract void alertO74
4 5.1.2 抽象类特点 ◼ 抽象类不能被实例化,例Point p = new Point(); ◼ 子类继承抽象类时,必须重写抽象方法, 否则仍为抽象类 abstract class Point { int x = 1, y = 1; void move(int dx, int dy) { x += dx; y += dy; alert(); } abstract void alert(); } abstract class ColoredPoint extends Point { int color; } class SimplePoint extends Point { void alert() { } } Point p = new SimplePoint();
class Circle extends Graphics abstract class Graphicsdouble r; String C;abstract voidparameterOCircle (double u, String v) <abstractvoidareaO;=u, c=V人多态性(polymorphism)运行结果rameterO应用场合:不同子类可以用1.0 2.0stem.out.println(r + " " + c); )2.0ea() (不同的方式实现同一共同3.0 Redcem.out.println(Math.PI*r*r);接口,该共同接口建立了28.274333class Recta一个基本形式rec=newRectangle(1.0,2.0)double h, w,Circle cir=new Circle(3.0,"Red");Rectangle (double u, double v) Graphics[] g=[rec, cir);h = u; w = v;for(inti=O;i<g.length;i++)1g[i].parameter();g[i].area();void parameterOSystem.out.println(h + " " + w1void area() ( System.out.println(h*w); )75
5 5.1.3 抽象类的多态性 ◼ 多态性 abstract class Graphics { abstract void parameter(); abstract void area(); } class Rectangle extends Graphics { double h, w; Rectangle (double u, double v) { h = u; w = v; } void parameter() { System.out.println(h + “ “ + w); } void area() { System.out.println(h*w); } } Rectangle rec = new Rectangle(1.0, 2.0); Circle cir = new Circle(3.0, “Red”); Graphics[] g = {rec, cir}; for (int i = 0; i < g.length; i++) { g[i].parameter(); g[i].area(); } class Circle extends Graphics { double r; String c; Circle (double u, String v) { r = u; c = v; } void parameter() { System.out.println(r + “ “ + c); } void area() { System.out.println(Math.PI*r*r); } } 运行结果 1.0 2.0 2.0 3.0 Red 28.274333882308138 多态性(polymorphism) 应用场合: 不同子类可以用 不同的方式实现同一共同 接口,该共同接口建立了 一个基本形式