java 抽象类和接口——抽象类
文章目录
- 抽象类
- 抽象类概念
- 抽象类语法
- 抽象类特性
- 抽象类的作用
- 抽象类总结
抽象类
抽象类概念
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
比如:
说明:
- 矩形、圆形、三角形都是图形,因此和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; // 面积
}
注意:抽象类也是类,内部可以包含普通方法和属性,甚至构造方法。
抽象类特性
- 抽象类不能直接实例化对象。
可以看到代码报错。
- 抽象方法不能是 private 的。
代码报错
注意:抽象方法没有加访问限定符时,默认是public。
- 抽象方法不能被final和static修饰,因为抽象方法要被子类重写。
代码报错
- 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 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 {}
- 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类。
- 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量。
抽象类的作用
当实际工作不应该由父类完成,而应由子类完成.。那么此时如果不小心误用成父类了,使用普通类编译器是不会报错的。但是父类是抽象类就会在实例化的时候提示错误,让我们尽早发现问题。
就像上面的图形例子,画图形的实现不是父类来完成的,而是由子类来完成的。
抽象类总结
【总结】
- 抽象类使用abstract修饰类。
- 抽象类当中可以包含普通类所能包含的成员。
- 抽象类和普通成员不一样的是,抽象类当中可以包含抽象方法。
- 抽象方法是使用abstract修饰的,这个方法没有具体的实现。
- 不能实例化抽象类。(new)
- 抽象类存在的最大意义就是被继承。
- 如果一个普通类继承了抽象类,此时必须重写抽象类当中的方法。
- 如果一个抽象类A继承了一个抽象类B,此时A当中不需要重写B当中抽象方法。但是如果A再被普通类继承,就需要重写。
java 抽象类和接口——抽象类相关推荐
- 《java与模式》笔记-----抽象类和接口
抽象类和接口 什么是接口:接口就是一些方法特征的集合------接口是对抽象的抽象. 什么是抽象类:抽象类对某具体类型的部分实现------抽象类是对具体的抽象. 方法特征包括:方法的名字.参数的数目 ...
- Java复习之抽象类和接口
Java复习之抽象类和接口 Java复习之抽象类和接口 什么是抽象类和接口 抽象类与接口的区别 什么情况下使用抽象类或接口 一个demo引起来的对于java方法区堆栈的研究 首先我们需要明白抽象类与接 ...
- Java笔记:抽象类和接口
Java笔记:抽象类和接口 抽象类 接口 接口多重实现 接口继承接口 嵌套接口 工厂模式 抽象类 在普通类中,一个类必须实现自身写的所有方法,每个方法必须含有自己的方法体.即便先创建一个父类,再由后续 ...
- Java—抽象类和接口
抽象类与接口 抽象类 定义和语法 理解抽象类 作用 抽象类总结: 接口 概念 接口特性 注意事项: 实现多个接口 接口使用实例 Clonable 接口和深拷贝 抽象类和接口的区别? 抽象类 定义和语法 ...
- 细谈java抽象类和接口
抽象类和接口 抽象类 抽象类:如果一个类中没有足够的信息来描绘一个对象,那么这个类就是抽象类 抽象类入门 矩形.三角形.圆形类都是图形类,因此和Shape的关系应该是extends 虽然Shape类中 ...
- Java中抽象类和接口的使用方法及区别
1.抽象类和接口 抽象类和接口为我们提供了实现类的公共行为规范,在继承它们时对里面的抽象方法进行重写就可以了. 抽象类:包含抽象方法和普通方法,抽象方法只需要声明就可以了,不需要写出方法体,此外,抽象 ...
- C++中的抽象类以及接口的区别联系
一.抽象类和接口 抽象类: 抽象类是特殊的类,不能被实例化(将定义了纯虚函数的类称为抽象类):除此以外,具有类的其他特性: 重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法 ...
- C++ 接口(抽象类)
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105020800 接 ...
- PHP抽象类与接口的区别
来源:https://www.cnblogs.com/catcrazy/p/6289446.html 首先,看看什么是抽象类和接口 抽象类: 定义为抽象的类不能被实例化.任何一个类,如果它里面至少有一 ...
最新文章
- JTEXTFIELD
- 系统访问慢的几个原因
- 配置GitLab 用smtp发邮件 (gitlab-6.7.3)
- 【MM模块】 Info Record 采购信息记录
- im4java profile_GraphicsMagick+im4java
- SaltStack WEB UI Halite初体验
- 集合:按元素的中文属性排序
- web用户登录界面设计_UI设计师怎样做界面设计?
- php socket 小程序,实例详解微信小程序如何使用Socket
- CentOS图形界面和命令行切换
- 第八届蓝桥杯省赛真题--纸牌三角形
- BZOJ 2843 极地旅行社
- Python_随机生成11位手机号
- 一起学爬虫(Python) — 04
- Android 神器 xposed 框架使用指南
- 关于重装系统后开始菜单栏anaconda3文件夹消失问题的解决办法
- 51单片机小白零基础教程——点亮第一个小灯以及流水灯(附原理图、代码详细讲解)
- 红黑树Red/Black Tree
- 机器学习(六)--------python实现朴素贝叶斯对email分类
- 达摩院2021十大科技趋势:云原生重塑IT技术体系
热门文章
- Codeforces Round #840 (Div. 2) and Enigma 2022 - Cybros LNMIIT题解
- 你知道什么是三层架构吗?
- win10如何解决Excel双击打开显示灰色空白?
- element-ui表单下拉选项展示来自数据库的内容
- 【你好,windows】Windows 10 18363.476 X86X64企业G纯净版2019.12.5
- spring常用注解剖析
- Rosalind全排列的问题
- 这5个PNG免抠素材网站,可商用,赶紧马住了
- 计算机的安全选项在哪里,我的win10无线网络属性安全选项在哪里?
- Oracle数据库实验四查询实验三(Oracle 11g)