抽象类(abstract class)

随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

用abstract关键字来修饰一个类时,这个类叫做抽象类;

用abstract来修饰一个方法时,该方法叫做抽象方法。

抽象方法:只有方法的声明,没有方法的实现。以分号结束。

abstract int abstractMethod1( int a );

含有抽象方法的类必须被声明为抽象类。

抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。

不能用abstract修饰私有方法,构造方法,静态方法。

抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类。

以下依旧通过代码来说明abstract关键字的用法
父类:

package cn.com.Classwork190123;public abstract class Gun {private long length;public void shoot(String shootType){System.out.println("枪的射击的方法\n");}/*抽象方法,使用关键字abstract不能有方法体,但是方法的返回类型需要表明*/public abstract void sound();public abstract boolean shift();}

子类1:

package cn.com.Classwork190123;public class SignalGun extends Gun {public void shoot(){System.out.println("朝天发射");}@Overridepublic void sound() {}@Overridepublic boolean shift() {return false;}}

子类2:

package cn.com.Classwork190123;public class M4 extends Gun {/*如果一个类继承自抽象类,则必须实现这个抽象类的所有的抽象方法实现  类似于重写,如果父类中没有对应的方法体,子类来完成这个方法就叫实现能不能重写?  也可以重写*/@Overridepublic void sound() {System.out.println("嘚嘚嘚");}@Overridepublic boolean shift() {System.out.println("40");return true;}
}

子类3:

package cn.com.Classwork190123;public class M249 extends Gun {@Overridepublic void sound() {System.out.println("哒哒哒");}@Overridepublic boolean shift() {System.out.println("100");return true;}
}

下面是一个案例

父类:

package cn.com.Classwork190123;public abstract class Employee {public abstract void computePay();
}

程序员类:

package cn.com.Classwork190123;public class Programmer extends Employee {@Overridepublic void computePay() {System.out.println("计算薪水按项目奖金");}
}

会计类;

package cn.com.Classwork190123;public class Accountant extends Employee {@Overridepublic void computePay() {System.out.println("计算薪水按月份");}
}

销售类:

package cn.com.Classwork190123;public class SalesPerson extends Employee{@Overridepublic void computePay() {System.out.println("按提成计算薪水");}
}

案例:

在航运公司系统中,Vehicle类需要定义两个方法分别计算运输工具的燃料效率和行驶距离。

问题:卡车(Truck)和驳船(RiverBarge)的燃料效率和行驶距离的计算方法完全不同。Vehicle类不能提供计算方法,但子类可以。

Java允许类设计者指定:超类声明一个方法但不提供实现,该方法的实现由子类提供。

这样的方法称为抽象方法。有一个或更多抽象方法的类称为抽象类。

Vehicle是一个抽象类,有两个抽象方法。
实现方式与上面一个案例类似,emmm就不附代码了(主要是我懒不想写了。。。)

java中抽象类(abstract class)相关推荐

  1. Java中抽象类 abstract和interface的区别

    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...

  2. java中的abstract和interface差异

    java中的abstract和interface差异 这里需要谈到抽象类和Interface的差别,abstract class和interface是支持抽象类定义的两种机制.正是由于这两种机制的存在 ...

  3. java中抽象类继承抽象类_用Java中的抽象类扩展抽象类

    java中抽象类继承抽象类 示例问题 当我创建Java :: Geci抽象类AbstractFieldsGenerator和AbstractFilteredFieldsGenerator我遇到了一个不 ...

  4. Java中抽象类和接口在概念、语法和应用上的区别和关系

    2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...

  5. java中抽象类继承抽象类_Java中的抽象类用示例解释

    java中抽象类继承抽象类 Abstract classes are classes declared with abstract. They can be subclassed or extende ...

  6. [转载] Java中的abstract关键字

    参考链接: Java中的abstract关键字 在Java中,一说到"抽象",肯定会想到abstract关键字,今天就来讲一下这个关键字. (1).在class前面添加abstra ...

  7. 关于Java中抽象类和接口的一点思索

    Java中抽象类和接口的一点思索 成员方法上的区别: 1. java中的抽象类可以提供成员方法的实现细节,抽象方法只能是被public和protected来修饰 配合abstract关键字,子类需要实 ...

  8. 详细解答Java中抽象类和接口的区别问题!

    接口(Interface)和抽象类(Abstract Class)是支持抽象类定义的两种机制. 一.抽象类 在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称 ...

  9. 解析java中的abstract关键字

    解析java中的abstract关键字 1 含义 abstract:抽象的;是java中用来修饰类和方法一个关键字 2 为什么要用 2.1 当我们不想类能够实例化时(类实例化没有意义,例如Animal ...

最新文章

  1. ROS与深度相机入门教程:(2) 在ROS中驱动Intel D435i深度相机采集数据(遇到的问题)
  2. python-ubuntu
  3. php5.2.3 zend3,windows 2008 R2 下 IIS7.5+PHP5.2.17+Mysql5.5.16+Zend3.3.3
  4. 服务器负载不高 响应慢_京东面试官问我什么是负载均衡,兄弟们我这样说对嘛?...
  5. ad中pcb双面板怎么设置_PCB的设计规则和加工要求参考
  6. 入Java_初入Java的方法
  7. Thymeleaf与Spring集成(第2部分)
  8. 下拉框_教你封装 Element Tree 树状下拉框
  9. 2019年12月计算机统考答案,2019年12月计算机等级WPS考前冲刺练习题及答案
  10. 实践GoF的设计模式:单例模式
  11. linux系统汇总的qt,QT 编程总结_Linux编程_Linux公社-Linux系统门户网站
  12. 诺基亚7plus支持html,【诺基亚7Plus评测】外观:全面屏是最大亮点_诺基亚 7 Plus(4GB RAM/全网通)_手机评测-中关村在线...
  13. lucene bug的报告经历
  14. javascript document.cookie
  15. java调用短信api接口发送短信demo实例
  16. 公司的IT总监在公司里是什么样的角色?
  17. 达摩院命名实体识别及其在阿里小蜜的应用(v2020-05-11)
  18. java 数据周期预测_预测算法 | Holt Winter季节性指数平滑法 附JAVA代码
  19. 零基础学爬虫大概多久?
  20. 翻转课堂教学感受调查

热门文章

  1. baklib-在线文档创作、托管的一体化电子出版平台
  2. Alta PCI-1553B的BC端操作——认识Alta卡
  3. Kotlin中的单例模式
  4. Random Walk 随机漫步理论 Random Walk Theory 随即漫步应用
  5. 正则表达式同时去掉单引号和双引号
  6. 会计转行自动化测试上岸,月薪11k太快乐了!
  7. Java黄金矿工 2.绘制图片
  8. python动态粒子素材_python学习笔记之十:文件和素材
  9. 【概念卡片】美团CEO王兴的竞争之道,它能给你底气
  10. 计算机网络复习资料-谢希仁版