Java中的抽象
在本教程中,我们将看到Java中的抽象。
介绍
Abstraction
是仅暴露必要细节和隐藏实施细节的概念。
它是除了封装,继承和多态性之外的基本oops概念之一。
抽象仅保留与特定目的最相关的信息。
例如:
ArrayList以顺序方式将对象存储为列表,我们可以使用
add()
添加元素到ArrayList的方法, remove()
从中删除元素的方法,以及 get()
从ArrayList检索元素的方法。
这就是你需要知道的一切 ArrayList
。
这是Java中的抽象。
如果要使用ArrayList,则无需了解如何 ArrayList
在内部工作。 ArrayList
通过实施使用抽象 List
接口和列表接口提供了所有必要的方法来使用ArrayList。
因此,我们可以声明ArrayList如下所示:
List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); list.remove("Python"); String python = list.get(1);
并打电话 add()
那 remove()
和 get
列表接口方法。
假设我们稍后意识到我们需要使用 LinkedList
而不是 ArrayList
我们需要执行更多添加和删除操作而不是访问操作。
我们可以通过ArrayList与链接列表来了解它们之间的差异。
我们只需要更改突出显示的线路。
List<String> list = new LinkedList<>(); list.add("Java"); list.add("Python"); list.add("C++"); list.remove("Python"); String python = list.get(1);
ArrayList和
LinkedList
通过实现列表接口使用抽象,这就是我们能够替换的原因 ArrayList
和 LinkedList
在上面的例子中。
让我们采取另一个现实生活的例子。
当我们搜索任何文本时 google
,只需在文本区域中键入文本,然后单击"搜索"按钮。
景点后面发生了什么,谷歌搜索算法如何工作,我们可能无法意识到这一点。
实现抽象的方法
我们可以在Java中使用两种方式实现抽象。
- 抽象类(0到100%抽象)
- 接口(100%抽象)
Java的抽象类
抽象类是声明抽象的类,并且可以拥有
abstract or non abstract methods
。
它应该由儿童程序扩展,应该实施抽象方法。
Java的抽象方法:
抽象方法是没有实施例的方法:它没有任何身体。
abstract class Shape{ public abstract double calculateArea(); //No body for calculatedArea method }
Java中的接口
接口通常用于为课堂提供合同。
接口没有任何方法的实现.A类实现接口,从而继承接口的抽象方法。
因此,签署合同,我们同意如果我们实现此接口,则必须使用其方法。
这只是一种模式,它本身不能做任何事情。
package com.arpit.theitroad; interface Paintable { void paint(); } public class Room implements Paintable{ @Override public void paint() { System.out.println("Painting the room"); } }
抽象例子
让我们说我们有运动 interface
。
现在它的实施将由名为"Cricket"和"足球"的类提供。
在实际方案中,最终用户不会知道实现类,可以通过工厂方法提供实现类。
工厂方法可用于根据某些标准创建实现类的对象。
让我们创建一个打电话的接口 Sport.java
。
package com.arpit.theitroad; public interface Sport { void play(); }
创建类命名 Cricket.java
package com.arpit.theitroad; public class Cricket implements Sport { @Override public void play() { System.out.println("Playing cricket"); } }
创建类命名 Football.java
package com.arpit.theitroad; public class Football implements Sport { @Override public void play() { System.out.println("Playing football"); } }
创建名为的主类 SportInterfaceMain.java
package com.arpit.theitroad; public class SportInterfaceMain { public static void main(String[] args) { //In real scenario, you will get concrete object using getSport() factory method Sport sport=new Cricket(); sport.play(); System.out.println("================="); //You can easily change implementation sport=new Football(); sport.play(); } }
运行上面的程序时,我们将得到以下输出:
Playing cricket ================= Playing football
抽象vs封装
封装是将相关数据(变量和方法)绑定到类中的过程。
我们可以使用诸如公共,私有,保护等访问修正师来实现封装。
封装是实现所需的抽象。
抽象更多的设计级别概念,并提供必要的细节和隐藏实现细节。
我们可以达到抽象 abstract class
和 interface
。