abstract抽象类
正如C++中存在着纯虚函数和抽象类
Java中同样存在抽象类关键字abstract
声明为抽象类 abstract class api {
public abstract void onCall(); // 声明为抽象方法
public void call() {
onCall(); // 类中的方法还可以调用抽象方法
}
}
抽象方法可以被类中的其他方法调用 但是在抽象方法被实现前 抽象类不可实例化
一种典型的用法是利用匿名方法实现
api ctx = new api() {
public void onCall() {
}
}
初始化时实现抽象类的抽象方法 这也是Android中常见的手法
和Interface的区别
Java中只允许单继承 所以一个类只能继承一个基类
一旦派生类继承了某个抽象类 它就不能再继承别的基类
而这时如果需要实现其他接口 只能依赖implements其他基类的interface
某种程度上来说 abstract和interface达成的效果是差不多的
之前分析过的interface实现的 接口
java interface实现的接口
C++抽象类实现的 接口
C++virtual实现的 接口
Java abstract实现的接口
package com.company;
abstract class api{
public abstract void onCall();
void normal() {
onCall();
}
}
class apiCtx extends api {
public void onCall() {
System.out.println("apiCtx.onCall");
}
}
class apiContent {
private api api_;
public void call(api api) {
api_ = api;
api_.onCall();
}
}
public class Main{
public static void main(String[] args) {
apiContent ctx = new apiContent();
ctx.call(new apiCtx());
}
}
实现方式和C++抽象类实现接口的方式及其相似