【问题标题】:Is Encapsulation = Data Hiding + Abstraction? [duplicate]封装=数据隐藏+抽象? [复制]
【发布时间】:2021-07-24 22:30:55
【问题描述】:

根据geeksforgeeks.org/encapsulation-in-java封装=数据隐藏+抽象?如果是,那么我可以看到数据隐藏,但这里的抽象在哪里?

有人举这个作为封装的例子

class Person
{
    
    private String name;
    private int age;
    

    public void setName(String name){
        this.name = name;
    }
    
    public String getName(){
        return this.name;
    }
    
    public void setAge(int age){
        this.age = age;
    }
    
    public int getAge(){
        return this.age;
    }
}

有些人说这不是封装的例子。参考:https://www.youtube.com/watch?v=tjyZWqJkNpc (而且这个视频里教的人java学得真好,很难相信他会错)

那么什么是真正的封装?

  1. 数据隐藏+抽象
  2. 将变量和方法分组到一个单元中

哪个定义是正确的?

(只有在你知道否则忽略这个问题和标签时才回答,因为我是stackoverflow的新手,我不知道你如何提出问题的规则。我只是想清除我的疑虑)

【问题讨论】:

  • 作为一般建议,如果您因任何原因最终访问 geeksforgeeks.org,请关闭您的浏览器选项卡。该网站只不过是空洞的 SEO,没有实际有用的内容,而且我在上面看到的 90% 的文章都有明显不正确的信息。
  • @SilvioMayolo 对吗?有时我感觉很糟糕,因为 geeksforgeeks 只是提供定义,而该站点始终位于最前面。其他一些具有非常好的信息的网站真的很糟糕。对他们来说,这只是赚钱的生意。

标签: java oop encapsulation abstraction data-hiding


【解决方案1】:

封装可以用于这两种目的。在java中,封装是通过类实现的,类提供私有、公共等访问控制。当人们编写他们的类时,每个程序员都可以设置访问权限,以防止其他类对象的不当使用。这样,数据隐藏是可用的。并且班级用户不必知道甚至对他们关闭的细节。对封装信息(类有哪些成员,其他私有方法是什么等)的访问是有限的,这使得程序员只能专注于他们应该做的事情,无论实现多么复杂。所以在我看来,封装可以说是包含了抽象的概念。

【讨论】:

  • 那么为什么说“我们只能在java中以两种方式实现抽象,即抽象类和接口”?根据您的回答,看起来 getter 和 setter 也提供了抽象。不是吗?这意味着有多种方法可以在 java 中实现抽象。不是吗?
  • @BismuthOP 封装可以通过多种方式实现。那时的大多数计算机语言(go、C#、javascript)都为 OOD 提供了函数或规则,它不必是类和 getter、setter。类只是实现封装、低耦合等的一种方式。
  • 我之前的评论是关于实现抽象而不是封装? “我可以通过多少种方式在 java 中实现抽象?”您是否有来自可靠来源的适当证据的答案?
猜你喜欢
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2013-09-29
  • 2017-03-20
  • 2017-11-29
  • 2016-05-15
  • 1970-01-01
相关资源
最近更新 更多