1.抽象类

  • 抽象类,用来表示一个抽象概念.
  • 是一种只能定义类型,而不能产生对象的类,所以定义了抽象类则必须有子类的出现.
  • 抽象类的好处在于能够明确地定义子类需要覆写的方法
  • 抽象类需要使用abstract声明.
  • 抽象类里可以实现抽象方法,该方法特征在于:只有声明,并没有方法体(所以子类必须全部覆写,并且子类不能为抽象类)

比如图形(Shape)类, 就是一个抽象的概念,因为我们无法计算这个“图形”的面积,所以它的成员函数area()是空的。

而继承它的子类(矩形,椭圆形,三角形等)就可以去覆写area()成员函数. 里面通过数学公式,计算出面积.

参考图形(Shape)类,代码如下:

abstract class Shape       //抽象的图形类
{abstract public double area();        //abstract修饰的方法为抽象方法,无需实现方法体.但是必须被子类覆写
}class Ellipse extends Shape    //椭圆类
{private double wr;  //椭圆的半径宽度private double hr;  //椭圆的半径高度public Ellipse(double wr,double hr){this.wr = wr;this.hr = hr;}public double area(){return 3.14159*wr*hr;}
}public class Test{public static void main(String args[]){//Shape s = new Shape();                //如果定义抽象类,则将会报错Ellipse e = new Ellipse(2.5,1);System.out.println("Ellipse area = "+e.area());}
}

需要注意的是:

  • 抽象类可以存在构造方法,用来初始化抽象类的属性,
  • 抽象类不能使用final定义,

 

2.抽象内部类定义

在java中,如果我们抽象类的子类只有一个的话,则可以将它封装为抽象内部类里,从而为用户隐藏了这个无需知道的类.在类库中很常见.

示例如下:

abstract class A       //抽象类
{abstract public void printData();//abstract修饰的方法为抽象方法,无需实现方法体.但是必须被子类覆写static private class B extends A      //需要在抽象类里隐藏的内部类{private int Data=12;     public void printData(){System.out.println("B Data:"+this.Data);       //打印内部类的Data值}}static public A getInstance()           //获取实例{return new B();                 //通过静态方法来获取要隐藏的静态抽象内部类  (静态方法里只能使用静态变量)}
}public class Test{public static void main(String args[]){A a = A.getInstance();a.printData();                           //等价于: A.getInstance().printData();}
}

打印如下:

抽象类缺点:

  • 由于Java的单继承,每个类只能从一个抽象类继承.没有接口灵活.

下章学习: 10.JAVA-接口、工厂模式、代理模式、详解

转载于:https://www.cnblogs.com/lifexy/p/10826817.html

9.JAVA-抽象类定义相关推荐

  1. java定义一个door的类_再探Java抽象类与接口的设计理念差异

    原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是 ...

  2. 没有体现JAVA接口功能_深入浅出分析Java抽象类和接口【功能,定义,用法,区别】...

    本文实例讲述了Java抽象类和接口.分享给大家供大家参考,具体如下: 对于OOP编程来说,抽象是它一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:抽象类和接口. 这两者有相似之处也有很 ...

  3. Java中定义抽象类Shape,其中包含抽象方法double getPeremeter( )求周长和double getArea( )求面积。 定义一个矩形类,继承此抽象类,并自行扩充成员变量和方法。

    Java中定义抽象类Shape,其中包含抽象方法double getPeremeter( )求周长和double getArea( )求面积. 定义一个矩形类,继承此抽象类,并自行扩充成员变量和方法, ...

  4. JAVA抽象类和接口的区别【附经典分析用例Door】

    这篇文章对抽象类和接口说的很详细,希望对大家有所帮助. abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大 ...

  5. Java接口和Java抽象类

    Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了. 1.Java接口和Java抽象类最大的一个区别,就在于Java ...

  6. Java接口和Java抽象类的认识

    在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...

  7. java 抽象类 模板_Java抽象类的构造模板模式用法示例

    搜索热词 本文实例讲述了Java抽象类的构造模板模式用法.分享给大家供大家参考,具体如下: 一 点睛 模板模式的一些简单规则. 抽象父类可以只定义需要使用的某些方法,而不能实现的部分抽象成抽象方法,留 ...

  8. java抽象类和接口总结

    一.抽象类 二.接口 三.抽象类和接口的区别 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法的声明格式为: abstract vo ...

  9. java抽象类和接口详解

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念 ...

  10. IEnumeratorTItem和IEnumerator Java 抽象类和普通类、接口的区别——看完你就顿悟了...

    IEnumerable 其原型至少可以说有15年历史,或者更长,它是通过 IEnumerator 来定义的,而后者中使用装箱的 object 方式来定义,也就是弱类型的.弱类型不但会有性能问题,最主要 ...

最新文章

  1. 轻松掌握nodeJS之npm
  2. Sublime使用的插件和快捷键
  3. Java对象生命周期
  4. 使用视频作为网页背景的技术探讨
  5. TensorFlow 2.0 自定义操作与建模方式
  6. 计算机学院优秀主讲教师评选细则,关于转发《华南师范大学第二届“我最喜爱的导师”评选活动实施细则》的通知...
  7. c语言课程设计小时钟,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  8. EGOTableViewPullRefresh实现下拉刷新
  9. 基于状态空间模型的控制器设计
  10. Serverless 开发者平台
  11. 6.12使用tensorflow来搭建一个Transformer
  12. wps插入尾注(罗马数字变阿拉伯数字,即i变1)的操作方法
  13. HYSBZ 3991 寻宝游戏
  14. Qt5.6.3+VS2013环境搭建教程(最后支持XP系统的Qt版本)
  15. Python自动化运维开发实战
  16. 听课整理--whx_day3~day4(天坑)
  17. Ironic注册/部署/inspect/clean节点操作记录
  18. linux升级内核ivh,Linux内核升级
  19. android强制缓存写磁盘,Android缓存之DiskLruCache磁盘缓存的使用
  20. MacOS QQ红包助手 (消息防撤回、自动抢红包)

热门文章

  1. pm2-zabbix 安装与配置
  2. 自己动手丰衣足食之 jQuery 数量加减插件
  3. Java Daemon线程
  4. with...as...
  5. 服务器出现 nginx 502 Bad Gateway
  6. linux清理内存命令
  7. poj 3352 双连通分量
  8. 【入门经典】在母版页中使用CSS
  9. Oracle INTERVAL DAY TO SECOND数据类型
  10. JavaScript中的剪贴板(clipboardData)