Java中的抽象

时间:2020-02-23 14:36:07  来源:igfitidea点击:

在本教程中,我们将看到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通过实现列表接口使用抽象,这就是我们能够替换的原因 ArrayListLinkedList在上面的例子中。

让我们采取另一个现实生活的例子。

当我们搜索任何文本时 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 classinterface