JAVA——抽象

标签 java interface abstract-class abstraction data-hiding

我对 java 中的抽象有点困惑。

我查了很多页面说抽象就是数据隐藏(隐藏实现)。

我对抽象的理解是它是“部分实现”。只需在抽象类/接口(interface)中定义您需要的内容,然后扩展/实现它们并添加您自己的功能。

我不明白这是怎么隐藏数据的?实现类/接口(interface)后,您将可以访问代码,并根据需要对其进行修改。

我查了很多问题,关于这个的文章,但仍然对此感到困惑。

感谢任何帮助。 谢谢。

最佳答案

也许一个示例可以更好地帮助您。假设你想实现一个 Graph 类,它可能有邻接表或邻接矩阵来表示它的节点。所以在抽象中你至少要“addNode”“addEdge”到这个图:

public abstract class Graph
{
    public abstract int addNode();
    public abstract void addEdge(int from, int to);
}

现在你可以扩展两个类:

public class GraphAdjList extends Graph
{
    private Map<Integer,ArrayList<Integer>> adjListsMap;
    public int addNode()
    {
        //list based implementation 
    }
    public void addEdge(int from, int to)
    {
        //list based implementation
    }
}

public class GraphAdjMatrix extends Graph
{
    private int[][] adjMatrix;
    public int addNode()
    {
        //matrix based implementation 
    }
    public void addEdge(int from, int to)
    {
        //matrix based implementation
    }
}

当您从这两个类调用 addEdge 中的任何一个时,您不必担心其背后的数据结构,您只知道您获得了所需的结果,例如:

Graph g1,g2;
g1 = new GraphAdjList();
g2 = new GraphAdjMatrix();

g1.addEdge(1,2);
g2.addEdge(1,2);

通过多态性,您可以调用两个不同的函数,但得到的结果与 Graph 的客户端相同。

另一个现实生活中的例子是汽车刹车。作为汽车客户,厂家给你一个踏板让你踩,不知道后端的刹车是怎么实现的。它可以是后部的鼓式制动器或盘式制动器。您只需要踩刹车!

关于JAVA——抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37131123/

相关文章:

Java servlet 应用程序在我的本地电脑上工作,但在我的服务器开发上不工作

java - 如何在android中每24小时运行一次代码

java - Java中两个对象包的联合

Java重复方法实现时

java - 具有来自继承的抽象类的值的构造函数,该抽象类实现了一个接口(interface)

Java——抽象类和接口(interface)

java - n :m Relation with additional Information in Hibernate

java - 正则表达式 - 匹配不包含字符串的模式

browser - 为 "Brave"浏览器设置开发者工具

java - 扩展抽象类并使用具有不同参数的相同方法