抽象类 抽象方法
使用abstract修饰的类和方法。就是抽象类和方法
两者的关系
抽象类中可以没有抽象方法,但是抽象方法一定在抽象类中
抽象类
抽象类的作用
- 作为抽象方法的载体
里面放一些抽象方法 - 限制对类的实例化
如有一个 Pet类 Dog类 Cat类 Dog和Cat都继承自Dog 程序所有的操作都是对子类进行的。Pet类只是提供了子类必须要实现的函数(也可以认为是只要是继承了这个类就必须要遵循的标准)那么这个父类将没有实例化的意义。
抽象方法
- 抽象方法只有方法申明没有函数的具体实现
public abstract void eat(); - 抽象方法必须在抽象类中;
- 抽象的方法子类必须实现;(如果子类也是抽象的就不用实现)
极端情况
- 抽象类里面没有抽象方法 这个抽象类就是普通类
- 抽象类里面全都是抽象方法 这个抽象类就是借口
接口
刚刚也说到抽象类全是抽象方法 这个类就相当于接口 所以 接口就是最彻底的抽象
- 接口中只有方法申明 ,没有方法体
- 接口中可以可以静态方法
static void eat(){ } - 接口所有的变量都是直接赋初值 且 实现接口的类不可改
接口的定义
public interface MyInterface
public void fool();
}
接口的使用规则:
- 接口不可以被实例化
- 实现类必须实现接口的所有方法
- 实现类可以实现多个接口
- 接口中还可以定义常量,且是static、public
- 可以有静态方法 可以定义变量但必须定义直接赋初值
抽象类与接口的区别
接口中不能有具体实现,即方法实现或变量声明,抽象类 中可以有具体实现。
接口中的方法缺省方法的属性public abstract,而抽象 类不能省略。
一个类只能继承自一个抽象类,但可实现多个接口。即接 口支持多重继承,抽象类只支持单一继承。
抽象类表达的是继承概念,即子类继承自某抽象类。接口 表达的是标准、规则概念,即子类实现了某接口。
故继承抽象类使用extends关键字,实现接口使用 implements关键字。
抽象类利于代码复用,接口利于代码维护