第三章java中的抽象示例


介绍

Abstraction是一个只暴露基本细节并隐藏实现细节的概念。除了封装、继承和多态之外,它是OOPs的基本概念之一。抽象只保留与特定目的最相关的信息。

例如:

ArrayList将对象按顺序存储为列表,您可以使用add()方法将元素添加到 ArrayList、remove()从中删除元素的get()方法以及从 ArrayList 中检索元素的方法。这就是您使用ArrayList. 这就是java中的抽象。

如果你想使用 ArrayList,你不需要了解ArrayList内部是如何工作的。

ArrayList``List 通过实现接口来使用抽象,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);

List 接口的调用add()和方法。remove()``get

假设你后来意识到你需要使用LinkedList而不是ArrayList你需要执行更多的添加和删除操作而不是访问操作。你可以通过ArrayList 与 LinkedList来了解它们之间的区别。

您只需要更改突出显示的行。

List<String> list = new LinkedList<>();

list.add("Java");
list.add("Python");
list.add("C++");

list.remove("Python");
String python = list.get(1);

ArrayList并LinkedList通过实现 List 接口来使用抽象,这就是我们能够在上面的示例中ArrayList替换为的原因。LinkedList

让我们再举一个现实生活中的例子。

当您在 上搜索任何文本时google,您只需在文本区域中键入文本并单击搜索按钮。幕后发生了什么,谷歌搜索算法是如何工作的,你可能不知道。

实现抽象的方法

您可以在 java 中使用两种方式实现抽象。

  1. 抽象类(0 到 100% 抽象)
  2. 接口(100% 抽象)

java中的抽象类

抽象类是声明为抽象并且可以具有abstract or non abstract methods. 它应该由子类扩展并且应该实现抽象方法。

java中的抽象方法:

抽象方法是没有实现的方法,即它没有任何主体。

abstract class Shape{
     public abstract double calculateArea();  // No body for calculatedArea method
}

java中的接口

接口一般用于为类提供契约来实现。接口没有任何方法的实现。一个类实现了一个接口,从而继承了接口的抽象方法。所以这是一种签订合同,你同意如果你实现了这个接口,那么你必须使用它的方法。它只是一个模式,它本身不能做任何事情。

package com.arpit.java2blog;

interface Paintable
{
   void paint();    
}
public class Room implements Paintable{

    @Override
    public void paint() {
        System.out.println("Painting the room");
    }
}

抽象示例

可以说我们有 Sport as interface。现在它的实现将由名为“Cricket”和“Football”的类提供。在实际场景中,最终用户不会知道实现类,实现类的对象可以由工厂方法提供。工厂方法可用于根据某些标准创建实现类的对象。 让我们创建一个名为Sport.java.

package com.arpit.java2blog;

public interface Sport {

    void play();
}

创建名为的类Cricket.java

package com.arpit.java2blog;

public class Cricket implements Sport {

    @Override
    public void play() {
        System.out.println("Playing cricket");
    }
}

创建名为的类Football.java

package com.arpit.java2blog;

public class Football implements Sport {

    @Override
    public void play() {
        System.out.println("Playing football");

    }
}

创建名为的主类SportInterfaceMain.java

package com.arpit.java2blog;

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

抽象与封装

封装是将相关数据(变量和方法)绑定到一个类中的过程。我们可以使用public、private、protected等访问修饰符来实现封装。

封装是所需抽象的实现。

抽象更多的是设计级别的概念,可帮助您仅提供基本细节并隐藏实现细节。我们可以通过abstract class和来实现抽象interface

结论

您已经了解了什么是抽象,如何借助示例实现抽象以及抽象与封装之间的区别。 这就是abstractionJava中的全部内容。


原文链接:https://codingdict.com/