Java抽象类
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,可是本质上同样的详细概念的抽象。
在面向对象的概念中,全部的对象都是通过类来描绘的,可是反过来。并非全部的类都是用来描绘对象的,假设一个类中没有包括足够的信息来描绘一个详细的对象,这种类就是抽象类。
假设自下而上仰视类的继承层次结构,那么位于上层的类更具有通用性,甚至可能更加抽象。
从某种角度看,祖先类更加通用,人们仅仅将它作为派生其它类的基类。而不作为想使用的特定的实例类。
比如,考虑一下对Person类层次的扩展。
一名雇员是一个人,一名学生也是一个人。以下将Employee和类Student加入到类的层次结构中,例如以下图:
为什么要花费精力进行这样高层次的抽象呢?每一个人都有一些诸如姓名这种属性。学生与雇员都有姓名属性。因此能够将getName方法放置到位于继承关系较高层次的通用超类中。
如今,再添加一个getDescription方法,它能够返回对一个人的简短描写叙述。
比如:
an employee with a salary of $50,000.00
a student majoring in computer science
在Employee类和Student类中实现这种方法非常easy。可是在Person类中应该提供什么内容呢?除了姓名之外。Person一无所知。当然,能够让Person.getDescription()返回一个空字符串。然而。另一个更好的方法。就是使用abstractkeyword,这样就全然不须要实现这种方法了。
public abstract String getDescription(); //no implemention required为了提高程序的清晰度。包括一个或多个抽象方法的类本身必须被声明为抽象的。
abstract class Person{ ...... public abstract String getDescription(); }除了抽象方法之外,抽象类还能够包括详细数据和详细方法,如:
abstract class Person{ private String name; public Person(String n){ name = n; } public abstract String getDescription(); public String getName(){ return name; } }此外。抽像类不能被实例化,但它可引用非抽象子类的对象。
如今来看,我们定义一个类,里面放一个抽象方法,是为了其它类继承这个抽象类,勿必实现此抽象方法,如getDescription,Student和Employee都有描写叙述自己的方法getDescription,但描写叙述内容肯定是不一样的。
有些个接口要实现的方法太多,而我们仅仅须要当中一、两个即可了,这时用抽象类就是一个非常好的方法:
public static abstract class AbsMKSearchListener implements MKSearchListener { @Override public void onGetAddrResult(MKAddrInfo arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetPoiDetailSearchResult(int arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onGetShareUrlResult(MKShareUrlResult arg0, int arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) { // TODO Auto-generated method stub } }我们仅仅想要onGetAddrResult这个回调方法,若是实现MKSearchListener,就必须实现全部接口,这样要多写非常多代码且代码冗余,一两个要实现的接口也罢。但太多时。用抽象类是佳选,只是里面的方法都是已经空实现了的。故在继承抽象类AbsMKSearchListener时,实现里面任一方法都能够。
相关文章
- Java 异常错误 (Ljava/lang/String;)L java/lang/String;「建议收藏」
- JAVA学习路线(最全)[通俗易懂]
- java二维数组试题_Java二维数组及习题总结
- java 调用webservice asmx「建议收藏」
- 怎么下载java_怎样下载Java的环境?
- 轻松学习java可重入锁(ReentrantLock)的实现原理
- MFC Java 使用socket 中文乱码解决方法(一)「建议收藏」
- 【说站】java实现PDF加密、分割和生成封面图操作
- java虚拟机可以运行的文件_虚拟机的网络模型有
- java notifyall_Java Thread notifyAll()方法[通俗易懂]
- java打印菱形代码_java打印菱形代码
- java异常处理
- Java方法重载_java入门方法的使用
- Java中运算符 "|" 和 "||" 以及 "&" 和 "&&" 区别
- java获取postman的basic auth
- 【愚公系列】2023年04月 Java教学课程 130-Redis的常见问题和解决方案
- 用Java代码备份和还原MySQL数据库详解编程语言
- Properties属性文件操作Java工具类详解编程语言
- Oracle收购Java:瞩目引发的变革(oracle收购java)
- 策略Java利用Redis实现数据过期策略(redisjava过期)
- 策略研究Redis Java实现的过期策略(redisjava过期)
- 构建Java应用程序中Redis集群的方法(java连redis集群)
- 从Java到Oracle轻松操作数据库(java写oracle库)
- MySQL和Java结合的必备工具MySQL下载Java(mysql下载java)
- Sun认为C#不会替代Java