Java 抽象类

Java 抽象类

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

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

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。

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

先来看一个抽象类的例子

在Java语言中使用abstract class来定义抽象类。如下实例:

/* 文件名 : Employee.java */
public abstract class Employee
{private String name;private String address;private int number;public Employee(String name, String address, int number){System.out.println("Constructing an Employee");this.name = name;this.address = address;this.number = number;}public double computePay(){System.out.println("Inside Employee computePay");return 0.0;}public void mailCheck(){System.out.println("Mailing a check to " + this.name+ " " + this.address);}public String toString(){return name + " " + address + " " + number;}public String getName(){return name;}public String getAddress(){return address;}public void setAddress(String newAddress){address = newAddress;}public int getNumber(){return number;}
}

注意到该Employee类没有什么不同,尽管该类是抽象类,但是它仍然有3个成员变量,7个成员方法和1个构造方法。 现在如果你尝试如下的例子:

/* 文件名 : AbstractDemo.java */
public class AbstractDemo
{public static void main(String [] args){/* 以下是不允许的,会引发错误 */Employee e = new Employee("George W.", "Houston, TX", 43);System.out.println("\n Call mailCheck using Employee reference--");e.mailCheck();}
}

抽象方法的 3 个特征如下:

1.抽象方法没有方法体
2.抽象方法必须存在于抽象类中
3.子类重写父类时,必须重写父类所有的抽象方法

抽象类的定义和使用规则如下:

1.抽象类和抽象方法都要使用 abstract 关键字声明。
2.如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。而一个抽象类中,可  以有 0~n 个抽象方法,以及 0~n 个具体方法。
3.抽象类不能实例化,也就是不能使用 new 关键字创建对象。

那么如何继承并且使用抽象类呢?

例 1

不同几何图形的面积计算公式是不同的,但是它们具有的特性是相同的,都具有长和宽这两个属性,也都具有面积计算的方法。那么可以定义一个抽象类,在该抽象类中含有两个属性(width 和 height)和一个抽象方法 area( ),具体步骤如下。

1)首先创建一个表示图形的抽象类 Shape,代码如下所示。

2)定义一个正方形类,该类继承自形状类 Shape,并重写了 area( ) 抽象方法。正方形类的代码如下:

3)定义一个三角形类,该类与正方形类一样,需要继承形状类 Shape,并重写父类中的抽象方法 area()。三角形类的代码实现如下:

4)最后创建一个测试类,分别创建正方形类和三角形类的对象,并调用各类中的 area() 方法,打印出不同形状的几何图形的面积。测试类的代码如下:

在该程序中,创建了 4 个类,分别为图形类 Shape、正方形类 Square、三角形类 Triangle 和测试类 ShapeTest。其中图形类 Shape 是一个抽象类,创建了两个属性,分别为图形的长度和宽度,并通过构造方法 Shape( ) 给这两个属性赋值。

在 Shape 类的最后定义了一个抽象方法 area( ),用来计算图形的面积。在这里,Shape 类只是定义了计算图形面积的方法,而对于如何计算并没有任何限制。也可以这样理解,抽象类 Shape 仅定义了子类的一般形式。

正方形类 Square 继承抽象类 Shape,并实现了抽象方法 area( )。三角形类 Triangle 的实现和正方形类相同.

在测试类 ShapeTest 的 main( ) 方法中,首先创建了正方形类和三角形类的实例化对象 square 和 triangle,然后分别调用 area( ) 方法实现了面积的计算功能。

5)运行该程序,输出的结果如下:

参考文章:

1.https://www.runoob.com/java/java-abstraction.html

2.http://c.biancheng.net/view/1004.html

(自用)java博客作业3 Java抽象类相关推荐

  1. 一个好的java博客

    一个好的java博客:http://abushuia.javaeye.com/?show_full=true

  2. 基于SMB协议的共享文件读写 博客分类: Java

    基于SMB协议的共享文件读写 博客分类: Java 一.SMB协议 SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445. 服务器信息块(SMB)协议是一种IBM协议,用于在计算机 ...

  3. java基于ssm的个人博客系统_调研了 100 来个 Java 博客系统,发现这5个最好用

    大家好!我是 Guide 哥,Java 后端开发.一个会一点前端,喜欢烹饪的自由少年. 最近想倒腾一下博客,看了很多现成的比较成熟的开源博客系统,自己也简单从下面几个维度总结对比了一下: star数量 ...

  4. java博客推荐(收集好的博客)

    https://blog.csdn.net/ThinkWon  - 这位大佬的博客干货太多了,一定要看 https://blog.csdn.net/elim168 - 这个博客大佬把java方面知识介 ...

  5. 基于ssm+mysql的javaee微博博客系统,Java实现类似新浪微博网站、朋友圈分享系统

    基于SSM+mysql的javaee微博博客系统,Java实现类似新浪微博网站.朋友圈分享系统 主要技术 SpringBoot\SSM(两个版本都有) HTML.jQuery.HTML.CSS.JS ...

  6. java开源博客系统solo_Solo Java 开源博客

    Solo 是一款一个命令就能搭建好的 Java 开源博客系统,如果你想开个独立博客,请一定不要错过!2.5.0 版本主要支持了 Markdown/JSON 格式数据导出,并改进了 Markdown 渲 ...

  7. OO--第三单元规格化设计 博客作业

    OO--第三单元规格化设计 博客作业 前言 第三单元,我们以JML为基础,先后完成了 PathContainer -> Graph -> RailwaySystem 这是一个递进的过程,代 ...

  8. 【面向对象设计与构造】第一次博客作业

    [面向对象设计与构造]第一次博客作业 一.程序结构分析 1. 第一次作业 类图 由于第一次作业难度较低,实现起来也不需要很复杂的算法,因此在编写程序的时候只建立了两个类,Main类主要负责多项式的读入 ...

  9. OO第三次博客作业——规格

    OO第三次博客作业--规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...

最新文章

  1. python的沙盒环境virtualenv(二)--简单使用
  2. java web项目调用rest接口404
  3. 基于JavaWeb实现学校网站开发
  4. SSL、SSH、OpenSSH、OpenSSL 区别
  5. Acticity切换时ScrollView不停留原位置,自动滚动其他位置
  6. 2018年一线互联网公司Java高级面试题总结
  7. 为什么Docker容器将占领世界
  8. 技巧实例:如何在.NET中访问MySQL数据库
  9. Lumia 800 升级 windows phone 7.8
  10. C++_选择结构_循环结构_for循环_敲桌子案例_嵌套循环_乘法口诀案例_跳转语句break---C++语言工作笔记018
  11. Git前世今生-版本控制软件的发展
  12. 电子商务新模式--4B
  13. IntelliJ IDEA常用的快捷键积累总结
  14. spring freemarker 获取后端的值
  15. IPv4中IP地址分类
  16. mvc 执行action 获取html,Mvc--Html.ActionLink()用法
  17. 录制软件obs的使用方法
  18. 私有化单机题库管理软件“题库管家”1.3版本正式发布,windows版与mac版下载地址
  19. 360极速浏览器的兼容模式
  20. 尚硅谷kylin单机版之安装kylin

热门文章

  1. 能够1年涨薪2次的软件测试工程师,他到底强在哪里?
  2. 地理空间数据共享资源大汇总
  3. 33、HTML高频前端面试题
  4. trinity的简介、下载及使用
  5. 线性回归模型和非线性回归模型的区别是
  6. torch.norm-L2范数
  7. 西铁城s621c打印机调试说明,西铁城CL-S621CII驱动
  8. 汇编语言(王爽)期末复习
  9. Origin 中做图超出页面的调整办法
  10. ArcPy - 入门学习