抽象类和接口
一、抽象类
1、需求:定义一个图形类,该类应该包含求周长和面积的方法。
2、分析:图形包括很多种,如长方形,正方形,圆形等,各种图形均继承与图形这个父类,但是不同图形求周长、求面积的方法也不尽相同,换句话说
“方法的声明相同,但是方法的具体实现各异”。此时只能抽取方法的声明,并不能抽取方法的实现。
3、抽象类、抽象方法定义:
抽象方法定义: public abstract 返回值类型 方法名(参数);
抽象类定义: public abstract 类名{...}
/** * 图形定义 * @author Administrator * */ public abstract class Graph { /** * 图形名称 */ private String graphName; /** * 获取图形周长 * @return */ public abstract double getPerimeter(); /** * 获取图形面积 * @return */ public abstract double getArea(); /** * 获取图形名称 * @return */ public String getGraphName() { return graphName; } }
注:1)包含抽象方法的类也必须是抽象的。2)抽象类中可以包含抽象方法(getGraphName())。3)不能使用抽象类直接生产对象,必须由子类继承抽象类后覆盖其抽象方法后才能生成对象。
4)抽象类的意义:体现面向对象编程的编程思想。
二、接口
1、定义格式
public interface Graph { /** * 定义常量 */ public static final double constant1 = 3.14; /** * 获取周长 * @return */ public abstract double getPerimeter(); /** * 获取面积 * @return */ public abstract double getArea(); }
注:1)接口中的方法均为公共抽象方法。2)接口中无法定义普通的成员变量。3)接口中常量必须使用 public static final修饰。
4)接口不可以创建对象。5)子类覆盖接口的所有方法后才能够创建对象,否则子类只是一个抽象类。
6)接口之间可以存在多继承的关系。
2、接口的意义:
1)接口最重要的意义是作为多继承的替代方案:多继承会出现方法调用可能存在歧义的问题,但是多实现却没有。
2)面向接口编程使程序解耦,便于后期开发和维护。
三、抽象类和接口的区别:
1、抽象类是现实事物的抽象,只不过抽象的过程中某些方法的行为无法具像。
2、接口更多是表示功能的集合,实现接口的子类只是应该具有接口的功能。