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。

