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

标签:Java,抽象
0
投稿

猜你喜欢

  • Android使用Rotate3dAnimation实现3D旋转动画效果的实例代码

    2023-07-30 12:21:29
  • SpringCloud Feign远程调用实现详解

    2021-09-28 11:35:15
  • C#实现给Word每一页设置不同文字水印的方法详解

    2023-07-01 18:49:40
  • 浅谈抛出异常和捕获异常的一些区别

    2023-10-19 15:25:24
  • @valid 无法触发BindingResult的解决

    2023-08-10 09:16:12
  • Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法

    2021-07-31 01:20:06
  • 再谈异常处理try catch finally

    2021-11-12 11:17:31
  • java8 实现提取集合对象的每个属性

    2023-10-17 19:37:27
  • 用C#实现启动另一程序的方法实例

    2023-06-20 12:05:43
  • C#多线程之Thread中Thread.Join()函数用法分析

    2022-01-20 14:47:58
  • 很简单的Java断点续传实现原理

    2023-05-20 06:38:09
  • android跑马灯出现重复跳动以及不滚动问题的解决方法

    2023-07-24 00:33:48
  • java网络编程之socket网络编程示例(服务器端/客户端)

    2022-05-02 00:18:59
  • C++中的命名空间详细介绍

    2023-12-12 06:18:07
  • Android Bitmap和Drawable相互转换的简单代码

    2022-01-26 11:09:01
  • android Retrofit2网络请求封装介绍

    2022-02-09 18:46:49
  • 详解JAVA 弱引用

    2022-03-12 01:30:29
  • 使用MyBatis-Generator如何自动生成映射文件

    2023-05-29 18:39:46
  • C++实现幸运大抽奖(QT版)

    2021-09-15 21:32:00
  • spring异步service中处理线程数限制详解

    2021-09-02 23:20:12
  • asp之家 软件编程 m.aspxhome.com