访问修饰符在封装中是不是有任何作用[关闭]

Posted

技术标签:

【中文标题】访问修饰符在封装中是不是有任何作用[关闭]【英文标题】:Does access modifiers have any role to play in Encapsulation [closed]访问修饰符在封装中是否有任何作用[关闭] 【发布时间】:2016-06-10 15:21:10 【问题描述】:

这是一个类Encapsulate,它具有公共属性和公共方法。

class Encapsulate

  public int a;
  public int b;

  public static void main(String...s)
   
    Encapsulate e = new Encapsulate();
    e.setVar(10,20);
    System.out.println(e.getSome());
  

  public void setVar(int a, int b)
  
    this.a = a;
    this.b = b;
  

  public int getSome()
  
    return a + b;
  

这里是否遵循了 OOP 概念 Encapsulation

我确信它是适用的,因为两者在一个类中结合在一起,也许我们可以称之为弱封装,但有封装。

但我不知道如何证明,因为我的搜索显示类属性应该是私有的。

更新:默认访问说明符的情况。

【问题讨论】:

我不知道,这是否真的正确,但通常我说数据隐藏封装是相关的,但不一样. 这可能很有趣:programmers.stackexchange.com/questions/173547/… 如果我使用公共访问说明符绑定属性和方法,那么它们也会对其他类隐藏并绑定在一起(这就是封装),除非其他类实例化它们或扩展它们。 ***.com/questions/1020749/… 的可能重复项该问题的非常第一个 答案可能会回答您的问题。本站有搜索功能;在发布新问题之前使用它。 @Raedwald:感谢您提供的信息,但我知道,您提供的链接没有回答我的问题,至少我找不到我想要的。 【参考方案1】:

这是另一个封装隐藏数据的例子

软件对象在概念上类似于现实世界的对象:它们也由状态和相关行为组成。对象将其状态存储在字段(某些编程语言中的变量)中,并通过方法(某些编程语言中的函数)公开其行为。方法对对象的内部状态进行操作,并作为对象到对象通信的主要机制。隐藏内部状态并要求通过对象的方法执行所有交互称为数据封装——面向对象编程的基本原则。

这基本上意味着您应该将属性的访问修饰符更改为私有并允许通过方法访问属性

引用自https://docs.oracle.com/javase/tutorial/java/concepts/object.html

【讨论】:

【参考方案2】:

我不同意。封装是指仅由同一对象上的方法操作的隐藏数据,这就是封装的意义:

Java 中的封装是一种将数据(变量)和作用于数据(方法)的代码作为单个单元包装在一起的机制。在封装中,一个类的变量对其他类是隐藏的,只能通过其当前类的方法访问,因此也称为数据隐藏。

看看这里,解释正确。 http://www.tutorialspoint.com/java/java_encapsulation.htm

【讨论】:

以上是关于访问修饰符在封装中是不是有任何作用[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

实例变量修饰符

为啥受保护的修饰符在 Java 子类中的行为不同?

四种访问权限修饰符在工作中的常见用法

public private protected 三种访问修饰符在c#中的区别

java 访问修饰符

方法有那些访问控制修饰符,分别是啥作用