Java 中的抽象简介

简介: Java 中的抽象简介

数据抽象是一种仅向用户显示基本细节的属性。不向用户显示琐碎或非必需的单元。例如:汽车被视为汽车而不是其单个组件。

数据抽象也可以定义为仅识别对象所需特征而忽略不相关细节的过程。对象的属性和行为将其与其他类似类型的对象区分开来,也有助于对对象进行分类/分组。

考虑一个男人开车的真实例子。男人只知道踩油门会提高车速或踩刹车会停车,但他不知道踩油门车速实际上是如何增加的,他不知道汽车的内部机制汽车或在汽车中执行油门、刹车等。这就是抽象。

在java中,抽象是通过接口和抽象类来实现的。我们可以使用接口实现 100% 的抽象。

抽象类和抽象方法:

  1. 抽象类是用抽象关键字声明的类。
  2. 抽象方法是声明而没有实现的方法。
  3. 一个抽象类可能有也可能没有所有的抽象方法。其中一些可以是具体的方法
  4. 定义为抽象的方法必须始终在子类中重新定义,从而强制覆盖或使子类本身成为抽象的。
  5. 任何包含一个或多个抽象方法的类也必须用抽象关键字声明。
  6. 抽象类不能有对象。也就是说,抽象类不能直接用new operator实例化。
  7. 抽象类可以具有参数化构造函数,并且默认构造函数始终存在于抽象类中。

何时在示例中使用抽象类和抽象方法

在某些情况下,我们希望定义一个超类来声明给定抽象的结构,而无需提供每个方法的完整实现。也就是说,有时我们会想要创建一个只定义一个泛化形式的超类,该泛化形式将被其所有子类共享,而将其留给每个子类来填充细节。

考虑一个经典的“形状”示例,可能用于计算机辅助设计系统或游戏模拟。基本类型是“形状”,每个形状都有颜色、大小等。由此,衍生出(继承)特定类型的形状——圆形、方形、三角形等——每一种都可能有额外的特征和行为。例如,某些形状可以翻转。某些行为可能会有所不同,例如当您要计算形状的面积时。类型层次体现了形状之间的相似性和差异性。

java

复制代码


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

封装与数据抽象

  1. 封装是数据隐藏(信息隐藏),抽象是细节隐藏(实现隐藏)。
  2. 封装将数据和作用于数据的方法组合在一起,而数据抽象则处理将接口暴露给用户并隐藏实现细节。

抽象的优点

  1. 它降低了查看事物的复杂性。
  2. 避免代码重复并提高可重用性。
  3. 有助于提高应用程序或程序的安全性,因为只向用户提供重要的细节。


目录
相关文章
|
5月前
|
Oracle 安全 Java
Java语言简介及发展
Java语言简介及发展
|
6月前
|
Java 编译器 测试技术
Java基础16-Java注解简介和最佳实践(二)
Java基础16-Java注解简介和最佳实践(二)
47 4
|
7月前
|
SQL Java 程序员
Java 8中的Stream API:简介与实用案例
【5月更文挑战第23天】本文将深入探讨Java 8中的Stream API,这是一种能够极大提升Java程序员生产力的新特性。我们将从基础概念开始,然后通过一些实用的案例来展示如何使用Stream API进行数据处理和操作。无论你是Java的初学者还是经验丰富的开发者,本文都将为你提供有价值的信息。
|
6月前
|
前端开发 Java 关系型数据库
JavaWeb开发简介
JavaWeb开发简介
56 0
|
6月前
|
Java 调度
Java并发基础-线程简介(状态、常用方法)
Java并发基础-线程简介(状态、常用方法)
39 0
|
4月前
|
并行计算 Java 程序员
Java中的Lambda表达式和函数式编程简介
【8月更文挑战第1天】Lambda表达式,在Java 8中引入,为Java程序员提供了一种简洁、灵活的编写代码的方式。本文将通过实例介绍Lambda表达式及其在函数式编程中的应用,并展示如何利用这些特性简化代码和提高开发效率。
29 2
|
5月前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
65 6
|
6月前
|
Java 数据安全/隐私保护 开发者
Java是一种完全支持面向对象编程的语言,其面向对象特性包括封装、继承、多态和抽象等
【6月更文挑战第18天】**面向对象编程(OOP)通过对象封装状态和行为,实现问题域的抽象。Java全面支持OOP,核心特性包括**: - **封装**:保护数据安全,隐藏内部细节。 - **继承**:子类继承父类属性和行为,促进代码重用。 - **多态**:一个接口多种实现,增强灵活性和扩展性。 - **抽象**:通过接口和抽象类抽离共性,简化复杂性。 **Java的OOP便于理解和解决复杂系统问题。**
60 3
|
6月前
|
安全 Java 开发者
Java基础16-Java注解简介和最佳实践(一)
Java基础16-Java注解简介和最佳实践(一)
57 5
|
6月前
|
IDE Java 项目管理
Java入门——Intellij IDEA简介、使用IDEA开发程序、IDEA常用快捷键、IDEA其他操作
Java入门——Intellij IDEA简介、使用IDEA开发程序、IDEA常用快捷键、IDEA其他操作
93 3
下一篇
无影云桌面