Java 中的抽象介绍

目录
  • 1.抽象类和抽象方法
  • 2.何时在示例中使用抽象类和抽象方法
  • 3.封装与数据抽象
  • 4.抽象的优点

前言:

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

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

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

在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.抽象的优点

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

到此这篇关于Java 中的抽象介绍的文章就介绍到这了,更多相关Java 中的抽象内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java面向对象基础知识之封装,继承,多态和抽象

    目录 一.封装 二.继承 三.多态 四.抽象 总结 一.封装 封装:是面向对象方法的重要原则,就是把对象的属性和行为(数据)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,就是把不想告诉或者不该告诉别人的东西隐藏起来,把可以告诉别人的公开,别人只能用我提供的功能实现需求,而不知道是如何实现的.增加安全性 public class Person { private String name; private int gender; private int age; public String

  • 深入理解Java设计模式之抽象工厂模式

    目录 一.什么是抽象工厂模式 二.抽象工厂模式的应用场景 三.抽象工厂模式和工厂方法模式对比 四.抽象工厂模式的优缺点 五.抽象工厂模式的实现 六.总结 一.什么是抽象工厂模式 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式. 抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象. 根据里氏替换原则,任

  • Java 抽象类特点总结

    一.前言 前面我们学习了多态中的转型,那么现在我们开始学习抽象类的概述和使用 二.抽象类 生活大多事物是具有抽象含义的,比如我说一个生物,你想不到我说的生物是什么, 在比如说一个动物,你也想不到我说的是什么,这种让人想不到的概念可以理解就是 抽象类.抽象用abstract修饰 三.抽象方法 对于一个没有方法体的方法叫做抽象方法,抽象方法是抽象类的核心.抽象类中可以么有 抽象abstract修饰. 四.抽象类的特点

  • Java面向对象基础知识之抽象类和接口

    抽象类(abstract): 抽象类不能创建实例,它只能作为父类被继承.抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象.从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类的随意性. (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基

  • java 多态与抽象类详解总结

    目录 前言 多态 初识多态 什么是多态? 多态的分类 多态的必要条件 实现多态 向上转型 向下转型 instanceof运算符 具体实现 抽象类与抽象方法 为什么要使用抽象? 抽象方法 抽象类 前言 今天是2021LOL全球总决赛,一直不被大家看好的EDG冲到了决赛对战韩国队的DK,可以说EDG面对如此强大的对手,想赢是比较难的,为了给中国队打气我立下flag,如果EDG获胜那我就奖励自己学习到第二天6点,结果我就来了,,,恭喜EDG! 为了接下来接口的学习,我们先来学习多态与抽类相关的一些知识

  • Java抽象类和接口的区别详情

    1.抽象类 vs 接口  方法类型: 接口只能有抽象方法.抽象类可以有抽象和非抽象方法.从 Java 8 开始,它也可以有默认和静态方法. 最终变量: 在 Java 接口中声明的变量默认是最终的.抽象类可能包含非最终变量. 变量类型: 抽象类可以有final.non-final.静态和非静态变量.接口只有静态和最终变量. 实现: 抽象类可以提供接口的实现.接口不能提供抽象类的实现. 继承 vs 抽象:  Java 接口可以使用关键字"implements"来实现,抽象类可以使用关键字&

  • 深入浅析Java 抽象类和接口

    目录 一.抽象类 1.抽象类 1.1抽象类的定义 1.2抽象方法的定义方式 1.3抽象类的定义方式 2.抽象类和实例类的区别 3.抽象类示例 4.抽象类的特征 二.接口 1.接口 1.1接口的定义 1.1定义一个接口 1.2 接口的使用 1.3接口的注意事项 2.接口示例 3.接口的特征 三.抽象类和接口的区别 一.抽象类 1.抽象类 1.1抽象类的定义 在Java面向对象当中,所有的对象都是用过类进行描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类没有包含足够多的信息来描述一个具体的对

  • Java 中的抽象介绍

    目录 1.抽象类和抽象方法 2.何时在示例中使用抽象类和抽象方法 3.封装与数据抽象 4.抽象的优点 前言: 数据抽象是一种仅向用户显示基本细节的属性.不向用户显示琐碎或非必需的单元.例如:汽车被视为汽车而不是其单个组件. 数据抽象也可以定义为仅识别对象所需特征而忽略不相关细节的过程.对象的属性和行为将其与其他类似类型的对象区分开来,也有助于对对象进行分类/分组. 考虑一个男人开车的真实例子.男人只知道踩油门会提高车速或踩刹车会停车,但他不知道踩油门车速实际上是如何增加的,他不知道汽车的内部机制

  • java 中的封装介绍及使用方法

    java 中的封装介绍及使用方法 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问. 要访问该类的代码和数据,必须通过严格的接口控制. 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段. 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性. 封装的优点 1. 良好的封装能够减少耦合. 2. 类内部

  • Java 中的 BufferedReader 介绍_动力节点Java学院整理

    BufferedReader 介绍 BufferedReader 是缓冲字符输入流.它继承于Reader. BufferedReader 的作用是为其他字符输入流添加一些缓冲功能. BufferedReader 函数列表 BufferedReader(Reader in) BufferedReader(Reader in, int size) void close() void mark(int markLimit) boolean markSupported() int read() int

  • Java中Arrays的介绍及使用方法示例

    arrays介绍 java.util.Arrays是一个与数组相关的工具类,里面提供了大量的静态的方法,用来实现数组常见的操作. public static String toString(数组):将参数数组编程字符串(按照默认的格式:{元素1.元素2.元素3-}) public static Void sort(数组):按照默认升序(从小到大)对数组元素进行排序 备注: 1.如果是数值的话,sort默认按照升序从小到大 2.如果是字符串,sort按照字母升序排列 3.如果是自定义类型,那么自定

  • 有关Java中的BeanInfo介绍

    目录 1.JavaBean介绍 2.JavaBean的自省 3.JavaBean内省工具Introspector 4.JavaBean内省结果BeanInfo 5.内省结果BeanInfo的类型 6.Spring的BeanUtils.copyProperties 7.BeanUtils并发问题优化 8.BeanUtils Setter属性识别优化 9.BeanUtils 性能测试 1.JavaBean介绍 维基百科JavaBean的定义:JavaBeans是Java中一种特殊的类,可以将多个对象

  • Java中守护线程介绍及使用

    目录 一.什么是守护线程 二.为什么需要守护线程 三.如何使用 注意: 总结 一.什么是守护线程 在说守护线程之前,我们先说一下什么是用户线程. 用户线程:我们平常创建的普通线程.守护线程(即 Daemon thread):是个服务线程,用来服务于用户线程:不需要上层逻辑介入,当然我们也可以手动创建一个守护线程.在JVM中,所有非守护线程都执行完毕后,无论有没有守护线程,虚拟机都会自动退出. 二.为什么需要守护线程 存在任意一个用户线程的时候,JVM就不会退出.那么JVM 程序在什么情况下能够正

  • Java中super关键字介绍以及super()的使用

    目录 1.super的使用: 2.先复习一下this关键字的使用. 3.super关键字: 总结: 1.super的使用: (1)super是一个关键字. (2)super和this很类似,我们对比着学习. 2.先复习一下this关键字的使用. (1)this能出现在实例方法和构造方法中: (2)this的语法是“this.”和“this()”: (3)this不能出现在静态方法中: (4)this大部分情况下是可以省略的: (5)this.什么时候不能省略呢? 在区分局部变量和实例变量时不能省

  • 面向对象编程:Java中的抽象数据类型

    文章来源:互联网 作者:PaleSting/CSDN 在本文中,我们将考察Java中的数据类型,但是我们将介绍抽象数据类型(ADT)的概念.我们还将通过介绍Java Collections Framework(Java 集合架构)来学习Java定义的一些ADT. ADT 一个ADT是一个仅由保存的数据类型和可能在这个数据类型上进行的操作定义的.开发者们只能通过ADT的操作方法来访问ADT的属性,而且他们不会知道这个数据类型内部各种操作是如何实现的. 在Java中,我们常常使用一个接口来给出一个操

  • Java 中的Printstream介绍_动力节点Java学院整理

    PrintStream 介绍 PrintStream 是打印输出流,它继承于FilterOutputStream. PrintStream 是用来装饰其它输出流.它能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式. 与其他输出流不同,PrintStream 永远不会抛出 IOException:它产生的IOException会被自身的函数所捕获并设置错误标记, 用户可以通过 checkError() 返回错误标记,从而查看PrintStream内部是否产生了IOException

  • Java 中的 DataInputStream 介绍_动力节点Java学院整理

    DataInputStream 介绍 DataInputStream 是数据输入流.它继承于FilterInputStream. DataInputStream 是用来装饰其它输入流,它"允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型".应用程序可以使用DataOutputStream(数据输出流)写入由DataInputStream(数据输入流)读取的数据. DataInputStream 函数列表 DataInputStream(InputStream in

随机推荐