文章目录

  • 抽象类
    • 抽象类概念
    • 抽象类语法
    • 抽象类特性
    • 抽象类的作用
    • 抽象类总结

抽象类

抽象类概念

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

比如:

说明:

  • 矩形、圆形、三角形都是图形,因此和GRaphael类的关系应该是继承关系。
  • 虽然图形Graph中也存在draw的方法,但是由于Graph不是具体的图形,因此其内部的draw方法实际是没有办法2实现的。
  • 由于Graph没有办法描述一个具体的图形,导致其draw方法无法具体实现,因此可以将Graph设置为“抽象类”。

Graph的draw方法并没有什么具体的作用,像这种没有实际工作的方法, 我们可以把它设计成一个 抽象方法,包含抽象方法的类我们称为 抽象类。(abstract class)

抽象类语法

在Java中,一个类如果被 abstract 修饰,这个类就称为抽象类。抽象类中被 abstract 修饰的方法称为 抽象方法,抽象方法不用给出具体的实现体。

// 抽象类:被abstract修饰的类
public abstract class Graph {// 抽象方法:被abstract修饰的方法,没有方法体abstract public void draw();abstract void calcArea();// 抽象类也是类,也可以增加普通方法和属性public double getArea(){return area;}protected double area; // 面积
}

注意:抽象类也是类,内部可以包含普通方法和属性,甚至构造方法。

抽象类特性

  1. 抽象类不能直接实例化对象。

可以看到代码报错。

  1. 抽象方法不能是 private 的。

代码报错

注意:抽象方法没有加访问限定符时,默认是public

  1. 抽象方法不能被final和static修饰,因为抽象方法要被子类重写。

代码报错

  1. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰。

代码会报错

abstract class Graph1 {abstract public void draw();//画图形abstract void calcArea();public double getArea(){return area;}protected double area;
}//矩形类
class Rectangle extends Graph1 {private double length;private double width;Rectangle(double length, double width) {this.length = length;this.width = width;}public void calcArea(){area = length * width;}
}//圆形类
class Cycle extends Graph1 {private double r;final private static double PI = 3.14;public Cycle(double r){this.r = r;
}public void draw(){System.out.println("圆:r = "+r);}public void calcArea(){area = PI * r * r;}
}//三角形类
class Triangle extends Graph1 {private double a;private double b;private double c;@Overridepublic void draw() {System.out.println("三角形:a = " + a + " b = " + b + " c = " + c);}
}public class TestDemo {}
  1. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类。
  2. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量。

抽象类的作用

当实际工作不应该由父类完成,而应由子类完成.。那么此时如果不小心误用成父类了,使用普通类编译器是不会报错的。但是父类是抽象类就会在实例化的时候提示错误,让我们尽早发现问题。

就像上面的图形例子,画图形的实现不是父类来完成的,而是由子类来完成的。

抽象类总结

【总结】

  • 抽象类使用abstract修饰类。
  • 抽象类当中可以包含普通类所能包含的成员。
  • 抽象类和普通成员不一样的是,抽象类当中可以包含抽象方法。
  • 抽象方法是使用abstract修饰的,这个方法没有具体的实现。
  • 不能实例化抽象类。(new)
  • 抽象类存在的最大意义就是被继承。
  • 如果一个普通类继承了抽象类,此时必须重写抽象类当中的方法。
  • 如果一个抽象类A继承了一个抽象类B,此时A当中不需要重写B当中抽象方法。但是如果A再被普通类继承,就需要重写。

java 抽象类和接口——抽象类相关推荐

  1. 《java与模式》笔记-----抽象类和接口

    抽象类和接口 什么是接口:接口就是一些方法特征的集合------接口是对抽象的抽象. 什么是抽象类:抽象类对某具体类型的部分实现------抽象类是对具体的抽象. 方法特征包括:方法的名字.参数的数目 ...

  2. Java复习之抽象类和接口

    Java复习之抽象类和接口 Java复习之抽象类和接口 什么是抽象类和接口 抽象类与接口的区别 什么情况下使用抽象类或接口 一个demo引起来的对于java方法区堆栈的研究 首先我们需要明白抽象类与接 ...

  3. Java笔记:抽象类和接口

    Java笔记:抽象类和接口 抽象类 接口 接口多重实现 接口继承接口 嵌套接口 工厂模式 抽象类 在普通类中,一个类必须实现自身写的所有方法,每个方法必须含有自己的方法体.即便先创建一个父类,再由后续 ...

  4. Java—抽象类和接口

    抽象类与接口 抽象类 定义和语法 理解抽象类 作用 抽象类总结: 接口 概念 接口特性 注意事项: 实现多个接口 接口使用实例 Clonable 接口和深拷贝 抽象类和接口的区别? 抽象类 定义和语法 ...

  5. 细谈java抽象类和接口

    抽象类和接口 抽象类 抽象类:如果一个类中没有足够的信息来描绘一个对象,那么这个类就是抽象类 抽象类入门 矩形.三角形.圆形类都是图形类,因此和Shape的关系应该是extends 虽然Shape类中 ...

  6. Java中抽象类和接口的使用方法及区别

    1.抽象类和接口 抽象类和接口为我们提供了实现类的公共行为规范,在继承它们时对里面的抽象方法进行重写就可以了. 抽象类:包含抽象方法和普通方法,抽象方法只需要声明就可以了,不需要写出方法体,此外,抽象 ...

  7. C++中的抽象类以及接口的区别联系

    一.抽象类和接口 抽象类: 抽象类是特殊的类,不能被实例化(将定义了纯虚函数的类称为抽象类):除此以外,具有类的其他特性: 重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法 ...

  8. C++ 接口(抽象类)

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105020800 接 ...

  9. PHP抽象类与接口的区别

    来源:https://www.cnblogs.com/catcrazy/p/6289446.html 首先,看看什么是抽象类和接口 抽象类: 定义为抽象的类不能被实例化.任何一个类,如果它里面至少有一 ...

最新文章

  1. JTEXTFIELD
  2. 系统访问慢的几个原因
  3. 配置GitLab 用smtp发邮件 (gitlab-6.7.3)
  4. 【MM模块】 Info Record 采购信息记录
  5. im4java profile_GraphicsMagick+im4java
  6. SaltStack WEB UI Halite初体验
  7. 集合:按元素的中文属性排序
  8. web用户登录界面设计_UI设计师怎样做界面设计?
  9. php socket 小程序,实例详解微信小程序如何使用Socket
  10. CentOS图形界面和命令行切换
  11. 第八届蓝桥杯省赛真题--纸牌三角形
  12. BZOJ 2843 极地旅行社
  13. Python_随机生成11位手机号
  14. 一起学爬虫(Python) — 04
  15. Android 神器 xposed 框架使用指南
  16. 关于重装系统后开始菜单栏anaconda3文件夹消失问题的解决办法
  17. 51单片机小白零基础教程——点亮第一个小灯以及流水灯(附原理图、代码详细讲解)
  18. 红黑树Red/Black Tree
  19. 机器学习(六)--------python实现朴素贝叶斯对email分类
  20. 达摩院2021十大科技趋势:云原生重塑IT技术体系

热门文章

  1. Codeforces Round #840 (Div. 2) and Enigma 2022 - Cybros LNMIIT题解
  2. 你知道什么是三层架构吗?
  3. win10如何解决Excel双击打开显示灰色空白?
  4. element-ui表单下拉选项展示来自数据库的内容
  5. 【你好,windows】Windows 10 18363.476 X86X64企业G纯净版2019.12.5
  6. spring常用注解剖析
  7. Rosalind全排列的问题
  8. 这5个PNG免抠素材网站,可商用,赶紧马住了
  9. 计算机的安全选项在哪里,我的win10无线网络属性安全选项在哪里?
  10. Oracle数据库实验四查询实验三(Oracle 11g)