引言

如上图,二维图形类有三个子类,分别是正方形类,三角形类,圆形类;

我们都知道要求正方形的面积,直接使用面积公式边长的平方即可,同理三角形的是底乘高除以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());
}
}

注意事项

关于抽象类和抽象方法有如下注意事项:

  1. 抽象类不能创建对象

    抽象类的对象,调用该抽象对象抽象方法,但是抽象方法没有具体实现,调用起来没有任何意义;
  2. 抽象类中可以有构造方法,可供子类创建对象时,初始化父类成员使用

    子类的构造方法之中,是有默认的super()方法的,所以需要访问父类的构造方法,那么父类的构造方法需要存在;
  3. 抽象类中,并不一定要包含抽象方法,但是抽象方法所在的类必须时抽象类

    没有包含抽象方法的抽象类,目的是不想让调用者创建该对象,通常用于某些特殊的类结构设计;
  4. 抽象类的子类,必须重写抽象父类的所有抽象方法,除非子类也是抽象类

    如果子类不重写所有抽象方法,那么子类中还包含抽象方法,还应该是抽象类。

原文链接:https://sjdwz.com/11168.html

详解Java中的抽象类和抽象方法的更多相关文章

  1. 详解Java中的clone方法

    详解Java中的clone方法 参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 所谓的复制对象,首先要分配一个和源对象同样 ...

  2. java中的抽象类和抽象方法

    知识点:java中的抽象类和抽象方法 关键字abstract意为抽象的,可以用来修饰类和方法,分别称作抽象类和抽象方法 抽象类一般在多态的场景中使用 一:抽象类(abstract class) 在类的 ...

  3. 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析

    这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...

  4. 详解Java中的final关键字

    本文原文地址:https://jiang-hao.com/articles/2019/coding-java-final-keyword.html1 final 简介2 final关键字可用于多个场景 ...

  5. 详解Java中的Object.getClass()方法

    详解Object.getClass()方法,这个方法的返回值是Class类型,Class c = obj.getClass(); 通过对象c,我们可以获取该对象的所有成员方法,每个成员方法都是一个Me ...

  6. 详解Java中的字符串

    字符串常量池详解 在深入学习字符串类之前, 我们先搞懂JVM是怎样处理新生字符串的. 当你知道字符串的初始化细节后, 再去写String s = "hello"或String s ...

  7. 详解Java中格式化日期的DateFormat与SimpleDateFormat类

    DateFormat其本身是一个抽象类,SimpleDateFormat 类是DateFormat类的子类,一般情况下来讲DateFormat类很少会直接使用,而都使用SimpleDateFormat ...

  8. 详解Java中的clone方法:原型模式

    转:http://developer.51cto.com/art/201506/478985.htm clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的 ...

  9. 详解Java中的访问控制修饰符(public, protected, default, private)

    Java中的访问控制修饰符已经困惑笔者多时,其中较复杂的情况一直不能理解透彻.今天下定决心,系统.全面地研究Java中的访问控制修饰符的所有方面,并整理成这篇文章,希望有同样疑惑的读者读完后能有所收获 ...

随机推荐

  1. Shell中退出状态码exit

    shell中运行的每个命令都使用退出状态码(exit status)来告诉shell它完成了处理.退出状态码是一个0~255之间的整数值,在命令结束时由命令传回shell. 1 .查看退出状态码 Li ...

  2. endl与\n的用法区别

    学习C++的时候,老师说换行有两种写法. 1 //方法一 2 3 std::cout<<"你好!\n李华"; 4 5 //方法二 6 7 std::cout<&l ...

  3. 用Express 创建项目

    1.Node.js Express 框架安装:npm install express --save在当前目录下创建一个node_modules 2.安装必要的中间件npm install body-p ...

  4. uni-app、Vue3 + ucharts 图表 H5 无法渲染

    文章已收录到 github,欢迎 Watch 和 Star. 简介 从问题定位开始,到给框架(uni-app)提 issue.出解决方案(PR),再到最后的思考,详细记录了整个过程. 前序 当你在业务 ...

  5. Solution -「BZOJ 3812」主旋律

    \(\mathcal{Description}\)   Link.   给定含 \(n\) 个点 \(m\) 条边的简单有向图 \(G=(V,E)\),求 \(H=(V,E'\subseteq E)\ ...

  6. Solution -「ARC 104D」Multiset Mean

    \(\mathcal{Description}\)   Link.   读题时间≈想题时间,草.(   给定 \(N,K,M\),对于每个 \(x\in[1,N]\) 的整数 \(x\),统计多重集 ...

  7. Winds10 安装JDK8.0教程

    首先下载一个jdk,可以通过这个链接下载:https://pan.baidu.com/s/1aP6SdL8UQK_C2GvALLb6Wg也可以去官网下载:https://www.oracle.com/ ...

  8. [error]subprocess.CalledProcessError: Command '['which', 'g++']' returned non-zero exit status 1.

    ubuntu 20.04 上安装 mmcv-full 时,无论是执行: pip install mmcv-full 还是将 mmcv-full 项目克隆下来编译,均会出现问题. 百度无果,去必应上逛了 ...

  9. BGP4+协议测试——信而泰网络测试仪实操

    文章关键词 BGP4+协议:路由协议:协议测试: 一.前言: 为了有效管理高速发展的互联网,而将其划分为多个相对独立的网格,称为自治域(AS).AS之间通过外部网关协议(EGP)来交换网路可达性信息, ...

  10. RFC2544吞吐量测试详细步骤-信而泰Renix软件操作演示

    关键词:RFC1242:RFC2544:吞吐量:吞吐率. 吞吐量概述:吞吐量即吞吐率,这个词首先在RFC1242中被提出,是评估网络设备性能的首要指标,其定义是在设备没有丢帧的情况下的最大的转发速率, ...