详解Java中的抽象类和抽象方法
引言

如上图,二维图形类有三个子类,分别是正方形类,三角形类,圆形类;
我们都知道要求正方形的面积,直接使用面积公式边长的平方即可,同理三角形的是底乘高除以2,圆的面积是$\pi$乘以半径的平方。那么二维图形的面积该怎么算呢?我们无法给出一个通用的方式。那么二维图形就不能计算面积了吗?不是的。只要是二维平面的图形,就可以计算面积,只是没有一个通用的公式而已。由此可见正方形,三角形,圆形的面积可以很具体的给出,但是二维图形不能,因为它很抽象。
由此可得二维图形类的面积计算应该是抽象的,是抽象方法。
如果类中的某个方法,无法具体的给出,它就该是个抽象方法。
抽象方法的定义
Java中普通方法的定义方式是
访问权限 返回类型 方法名(有参数填写参数,没参数为空){
方法内部代码;
}
因为抽象方法我们无法给出具体的实现,所以抽象方法的定义与普通方法有所不同。定义方式如下:
访问权限 abstract 返回类型 方法名(有参数填写参数,没参数为空);
注意:因为不知如何实现,所以没有大括号了。
抽象方法的使用
抽象方法必须声明在抽象类中。
抽象类的定义方式如下:
访问权限 abstract class 类名{
}
子类在继承抽象类时,必须覆盖重写全部的抽象方法。(也叫实现方法)
我们可以写一下引言中的例子:
二维图形类定义如下:
package com.sjdwz;
/**
* @Description 二维图形类,抽象类,有计算面积的抽象方法
* @Date 2022/3/15
* @Created by 随机的未知 sjdwz.com
*/
public abstract class Graphics2D {
public abstract double getArea();
}
正方形类的定义如下:
package com.sjdwz;
/**
* @Description 正方形类
* @Date 2022/3/15
* @Created by 随机的未知 sjdwz.com
*/
public class Square extends Graphics2D{
//边长
private int length = 6;
//重写父类计算面积的方法
@Override
public double getArea() {
return this.length * this.length;
}
}
圆形类的定义如下:
package com.sjdwz;
/**
* @Description 圆形类
* @Date 2022/3/15
* @Created by 随机的未知 sjdwz.com
*/
public class Circle extends Graphics2D{
//半径长
private int radius = 6;
//重写父类计算面积的方法
@Override
public double getArea() {
return 3.14 * this.radius * this.radius;
}
}
测试类的定义如下:
package com.sjdwz;
/**
* @Description 测试类
* @Date 2022/3/15
* @Created by 随机的未知 sjdwz.com
*/
public class Test {
public static void main(String[] args) {
Square square = new Square();
Triangle triangle = new Triangle();
Circle circle = new Circle();
System.out.println("正方形的面积时"+square.getArea());
System.out.println("三角形的面积时"+triangle.getArea());
System.out.println("圆形的面积时"+circle.getArea());
}
}
注意事项
关于抽象类和抽象方法有如下注意事项:
- 抽象类不能创建对象
抽象类的对象,调用该抽象对象抽象方法,但是抽象方法没有具体实现,调用起来没有任何意义; - 抽象类中可以有构造方法,可供子类创建对象时,初始化父类成员使用
子类的构造方法之中,是有默认的super()方法的,所以需要访问父类的构造方法,那么父类的构造方法需要存在; - 抽象类中,并不一定要包含抽象方法,但是抽象方法所在的类必须时抽象类
没有包含抽象方法的抽象类,目的是不想让调用者创建该对象,通常用于某些特殊的类结构设计; - 抽象类的子类,必须重写抽象父类的所有抽象方法,除非子类也是抽象类
如果子类不重写所有抽象方法,那么子类中还包含抽象方法,还应该是抽象类。
原文链接:https://sjdwz.com/11168.html
详解Java中的抽象类和抽象方法的更多相关文章
- 详解Java中的clone方法
详解Java中的clone方法 参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 所谓的复制对象,首先要分配一个和源对象同样 ...
- java中的抽象类和抽象方法
知识点:java中的抽象类和抽象方法 关键字abstract意为抽象的,可以用来修饰类和方法,分别称作抽象类和抽象方法 抽象类一般在多态的场景中使用 一:抽象类(abstract class) 在类的 ...
- 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析
这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...
- 详解Java中的final关键字
本文原文地址:https://jiang-hao.com/articles/2019/coding-java-final-keyword.html1 final 简介2 final关键字可用于多个场景 ...
- 详解Java中的Object.getClass()方法
详解Object.getClass()方法,这个方法的返回值是Class类型,Class c = obj.getClass(); 通过对象c,我们可以获取该对象的所有成员方法,每个成员方法都是一个Me ...
- 详解Java中的字符串
字符串常量池详解 在深入学习字符串类之前, 我们先搞懂JVM是怎样处理新生字符串的. 当你知道字符串的初始化细节后, 再去写String s = "hello"或String s ...
- 详解Java中格式化日期的DateFormat与SimpleDateFormat类
DateFormat其本身是一个抽象类,SimpleDateFormat 类是DateFormat类的子类,一般情况下来讲DateFormat类很少会直接使用,而都使用SimpleDateFormat ...
- 详解Java中的clone方法:原型模式
转:http://developer.51cto.com/art/201506/478985.htm clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的 ...
- 详解Java中的访问控制修饰符(public, protected, default, private)
Java中的访问控制修饰符已经困惑笔者多时,其中较复杂的情况一直不能理解透彻.今天下定决心,系统.全面地研究Java中的访问控制修饰符的所有方面,并整理成这篇文章,希望有同样疑惑的读者读完后能有所收获 ...
随机推荐
- java-swing-事件监听-焦点监听器
感谢大佬:https://blog.csdn.net/weixin_44512194/article/details/93377551 开始不知道焦点是啥,其实就是打字的时候,这个一闪一闪的竖线. 与 ...
- 项目架构(结构)搭建:主流结构(UITabBarController + 导航控制器)
/* 项目架构(结构)搭建:主流结构(UITabBarController + 导航控制器) -> 项目开发方式 1.storyboard 2.纯代码 */ @interface AppDele ...
- iOS中利用CoreTelephony获取用户当前网络状态(判断2G,3G,4G) by徐文棋
前言: 在项目开发当中,往往需要利用网络.而用户的网络环境也需要我们开发者去注意,根据不同的网络状态作相应的优化,以提升用户体验. 但通常我们只会判断用户是在WIFI还是移动数据,而实际上,移动数据也 ...
- Kubernetes(K8s)基础概念 —— 凿壁偷光
Kubernetes(K8s)基础概念 -- 凿壁偷光 K8s是什么:全称 kubernetes (k12345678s) 作用:用于自动部署,扩展和管理"容器化应用程序"的 ...
- 文件I/O流、文件、FileInputStreaam、FileOutputStream、FileReader、FileWriter的介绍和使用
一.文件:保存数据的地方 1.文件流:文件在程序中是以流的形式类操作的 类比: 流:数据在数据源(文件)和程序(内存)之间经历的路径 输入流:数据从数据源(文件)到程序(内存)的路径 输出流:数据从程 ...
- 编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构
一.环境准备 两台主机: httpd+php(fastcgi模式) mariadb 服务器 软件版本: mariadb-10.2.40-linux-x86_64.tar.gz apr-1.7.0.ta ...
- ASP.NET Core 6框架揭秘实例演示[01]: 编程初体验
作为<ASP.NET Core 3框架揭秘>的升级版,<ASP.NET Core 6框架揭秘>提供了很多新的章节,同时对现有的内容进行大量的修改.虽然本书旨在对ASP.NET ...
- 大话devops
一.敏捷的局限性的促使devops诞生 敏捷的局限性:敏捷只注重开发阶段的敏捷,未涉及到整个产品生命周期流程其他环节导致采用敏捷开发流程后效果不明显. devops成为企业数字化转型的助推器,扮演基础 ...
- C++职工管理系统
目录 职工管理系统 一. 需求 二. 创建管理类 1.创建文件 2. 头文件实现 3. 源文件实现 三. 菜单功能 1. 添加成员函数 2. 功能实现 3. 测试菜单功能 四. 退出功能 1. 提供功 ...
- 基于FMC接口的Kintex-7 XC7K325T PCIeX4 3U VPX接口卡
一.板卡概述 标准VPX 3U板卡, 基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8.64b ...