Java 中的抽象介绍
作者:海拥 发布时间:2023-03-27 06:10:20
前言:
数据抽象是一种仅向用户显示基本细节的属性。不向用户显示琐碎或非必需的单元。例如:汽车被视为汽车而不是其单个组件。
数据抽象也可以定义为仅识别对象所需特征而忽略不相关细节的过程。对象的属性和行为将其与其他类似类型的对象区分开来,也有助于对对象进行分类/分组。
考虑一个男人开车的真实例子。男人只知道踩油门会提高车速或踩刹车会停车,但他不知道踩油门车速实际上是如何增加的,他不知道汽车的内部机制汽车或在汽车中执行油门、刹车等。这就是抽象。
在java中,抽象是通过接口和抽象类来实现的。我们可以使用接口实现 100% 的抽象。
1.抽象类和抽象方法
抽象类是用抽象关键字声明的类。
抽象方法是声明而没有实现的方法。
一个抽象类可能有也可能没有所有的抽象方法。其中一些可以是具体的方法
定义为抽象的方法必须始终在子类中重新定义,从而强制覆盖或使子类本身成为抽象的。
任何包含一个或多个抽象方法的类也必须用抽象关键字声明。
抽象类不能有对象。也就是说,抽象类不能直接用new operator实例化。
抽象类可以具有参数化构造函数,并且默认构造函数始终存在于抽象类中。
2.何时在示例中使用抽象类和抽象方法
在某些情况下,我们希望定义一个超类来声明给定抽象的结构,而无需提供每个方法的完整实现。也就是说,有时我们会想要创建一个只定义一个泛化形式的超类,该泛化形式将被其所有子类共享,而将其留给每个子类来填充细节。
考虑一个经典的“形状”示例,可能用于计算机辅助设计系统或游戏模拟。基本类型是“形状”,每个形状都有颜色、大小等。由此,衍生出(继承)特定类型的形状——圆形、方形、三角形等——每一种都可能有额外的特征和行为。例如,某些形状可以翻转。某些行为可能会有所不同,例如当您要计算形状的面积时。类型层次体现了形状之间的相似性和差异性。
abstract class Shape {
String color;
abstract double area();
public abstract String toString();
public Shape(String color){
System.out.println("Shape constructor called");
this.color = color;
}
public String getColor() { return color; }
}
class Circle extends Shape {
double radius;
public Circle(String color, double radius){
super(color);
System.out.println("Circle constructor called");
this.radius = radius;
}
@Override double area(){
return Math.PI * Math.pow(radius, 2);
}
@Override public String toString(){
return "Circle color is " + super.getColor()
+ "and area is : " + area();
}
}
class Rectangle extends Shape {
double length;
double width;
public Rectangle(String color, double length,double width){
super(color);
System.out.println("Rectangle constructor called");
this.length = length;
this.width = width;
}
@Override double area() { return length * width; }
@Override public String toString(){
return "Rectangle color is " + super.getColor()
+ "and area is : " + area();
}
}
public class Test {
public static void main(String[] args){
Shape s1 = new Circle("Red", 2.2);
Shape s2 = new Rectangle("Yellow", 2, 4);
System.out.println(s1.toString());
System.out.println(s2.toString());
}
}
输出:
Shape constructor called
Circle constructor called
Shape constructor called
Rectangle constructor called
Circle color is Redand area is : 15.205308443374602
Rectangle color is Yellowand area is : 8.0
3.封装与数据抽象
封装是数据隐藏(信息隐藏),抽象是细节隐藏(实现隐藏)。
封装将数据和作用于数据的方法组合在一起,而数据抽象则处理将接口暴露给用户并隐藏实现细节。
4.抽象的优点
它降低了查看事物的复杂性。
避免代码重复并提高可重用性。
有助于提高应用程序或程序的安全性,因为只向用户提供重要的细节。
来源:https://juejin.cn/post/7036184691245842446


猜你喜欢
- 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题。本篇主要从实例的角度分享下CORS
- spring 多文件配置:1、properties文件2、YAML文件一、properties文件在 Spring Boot 中, 多环境配
- 目录1. 简单认识BeanProcessorBeanProcessor的理解一个BeanProcessor的使用实例2. BeanProce
- @schedule注解动态配置时间间隔动态配置时间间隔是通过自己实现的任务注册到任务调度实现的,并在每次调度的时候更改下次调度时间间隔,如果
- Spring-Context的作用spring-context提供应用程序上下文,这是Spring的依赖注入容器,它可能总是在以某种方式使用
- 一、结构型模式结构型模式有什么好处?从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题二、适配器模式USB网线转换器三、
- 前言上篇博客我们介绍了如何创建一个spring项目,并且如何的存、取对象,介绍了相关方法,那么本篇博客将接着上篇博客的内容介绍如何更加简单的
- 我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再
- 一、文件上传概述实现Web开发中的文件上传功能,需要两步操作:1、在Web页面中添加上传输入项 <form
- Glide介绍Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管
- 要使用SAPI,首先添加引用DotNetSpeech,请自行下载DotNetSpeech.dll。 初始化对象,SpVoice voice
- 1、先看一下项目目录:2、新建一个AS项目,创建如上图所示的目录结构,然后添加内容:(1)修改添加布局文件:activity_main.xm
- 目录构造方法方法介绍reduce归约构造方法// 1.无参数构造方法new ConcurrentHashMap();// 2.指定初始容量n
- 前言:最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap、BitmapFactor
- 最近一个项目要导出word文档,折腾老半天,发现还是用freemarker的模板来搞比较方便省事,现总结一下关键步骤,供大家参考,这里是一个
- Java8的groupingBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是一个map对集合按照单个属性分组、分组
- 前言本文主要写的是:springboot下ueditor上传功能的实现及遇到的一些问题的处理整体项目结构展示Springboot整合uedi
- 想必大家都知道,国内的Android应用基本都是免费的
- 本文实例讲述了C#中is和as的用法,对加深is与as用法的理解有一定的帮助借鉴作用。具体如下:现来看个例子:public class Us
- 实践过程效果代码class BaseClass{ public class Win32