抽象类的具体应用可以看下这个简单的例子:
- 不要去继承一个已经实现好的类-----因为有抽象类和接口
- 下面是一个抽象类的用法
p.say() ;
}
};
- 当需要继承多个类时,我们可以用接口,接口也是方法全是抽象方法的抽象类,实现接口的类,也是改接口的子类,也可以进行转型操作
a.fun() ;
}
};
}
};
- 可以看到都是多态性的应用都是子类向父类转型
- 抽象类与接口在使用上如此相似,我们开发时优先使用接口,接口允许多继承
- 接口和抽象类的比较:
- 相同点:对象都不能实例化,通过多态性,都可由子类来实例化
- 不同点:抽象类:
包括一般方法、抽象方法、常量、变量
可以有构造方法,毕竟是一个类
抽象类可以实现多个接口
继承时单继承会有局限
接口:
包括常量,抽象方法。只是在接口定义中省略abstract
不能有构造方法
接口不能继承一个抽象类
解决单继承带来的局限性
- 从设计模式上来说:
接口中都是抽象方法,实现接口的子类必须都得覆写其中的方法,如果子类不希望都覆写,而只是希望使用其中的一个时,那怎么办呢?
- 可以在之中加一个抽象类来实现 接口---->抽象类----->子类 也即是适配器模式Adapter,看下面的例子:
}
};
- 接口可以进一步扩展---->工厂模式,在上面的USB例子中发现子类与接口紧密耦合,即USB a =new Mp3();发现如果子类需要变化,则我们必须修改客户端,而这在实际的开发中是不好的。可以加上一个工厂来解耦合
u.start() ;
u.stop() ;
}
};
- 重点:抽象类和接口都可以实例化,通过对象的多态性来实例化。