Java基础复习:abstract关键字&抽象类&模版模式

来源:互联网 发布:统计数据库 编辑:程序博客网 时间:2024/05/24 15:37

练习:求不同图形的周长,包括圆和矩形

package day3;/** * 抽象基类:图形 * @author well * */abstract class Graph{/** * 求图形的周长 * @return 图形的周长 */public abstract double getCircumference();}/** * 圆形 * @author well * */class Circle extends Graph{private double r;//半径public Circle(double r) {super();this.r = r;}@Overridepublic double getCircumference() {return 2*r*Math.PI;}}/** * 矩形 * @author well * */class Rectangle extends Graph{private double length;private double width;public Rectangle(double length, double width) {super();this.length = length;this.width = width;}@Overridepublic double getCircumference() {return 2*(length + width);}}/** * 题目:定义抽象类,求不同图形的周长 * @author well * */public class AbstractDemo {public static void main(String[] args) {Circle c = new Circle(2);double cc = c.getCircumference();System.out.println(cc);//12.566370614359172Rectangle r = new Rectangle(2, 3);double rr = r.getCircumference();System.out.println(rr);//10.0}}

使用abstract修饰的方法,没有方法体(没有{}),只有方法声明,抽象方法强制子类覆写

一旦一个类有了抽象方法,那么该类也必须声明为抽象类;但是抽象类可以没有抽象方法;

抽象类不能实例化,不能创建对象(抽象类就是用来继承的,相当于顶一个方法模版,让子类具体实现方法)


抽象类的体现:模版模式

抽象类是多个具体子类抽象出来的父类,具有高层次的抽象性;以该抽象类作为子类的模板可以避免子类设计的随意性;

抽象类的体现主要就是模板模式设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行拓展,但是子类在总体上大致保留抽象类的行为方式;

编写一个抽象父类,该父类提供了多个子类的通用方法,并把一个或多个抽象方法留给子类去实现,这就是模板设计模式;

/** * 抽象基类:图形 * @author well * */abstract class Graph{/** * 求图形的周长 * @return 图形的周长 */public abstract double getCircumference();/** * 求图形的面积 * @return 图形的面积 */public abstract double getAera();}


 

原创粉丝点击