当前位置: 首页 > 知识库问答 >
问题:

set和get方法相对于公共变量的优势[重复]

水麒
2023-03-14

可能重复:
为什么使用 getter 和 setter?

在你的类中创建访问私有变量的方法比创建公共变量有什么好处吗?

例如,第二种情况是否优于第一种情况?

//Case 1
public class Shoe{
    public int size;
}

//Case 2
public class Shoe{
    private int size;
    public int getSize(){
        return size;
    }

    public void setSize(int sz){
        size = sz;
    }

}

共有3个答案

赵同
2023-03-14
  1. 一些库需要这样做来满足“JavaBean标准”
  2. setter/getter可以位于接口中,属性不能位于接口中。
  3. setter/getter可以在派生类中轻松重写
  4. setter/getter抽象掉了值是按需计算还是仅作为属性的访问器的信息
武友樵
2023-03-14

使用公共变量可能会导致为变量设置错误的值,因为无法检查输入值。

如:

 public class A{

    public int x;   // Value can be directly assigned to x without checking.

   }

使用 setter 可用于通过检查输入来设置变量。保持实例 varibale 私有,getter 和 setter public 是 Encapsulation getter 的一种形式,setter 也与 Java Beans 标准兼容,

getter和setter还有助于实现多态性概念

如:

public class A{

     private int x;      //


      public void setX(int x){

       if (x>0){                     // Checking of Value
        this.x = x;
       }

       else{

           System.out.println("Input invalid");

         }
     }

      public int getX(){

          return this.x;
       }

多态示例:我们可以将 Sub 类型的对象引用变量作为调用方法的参数分配给被调用方法的超类参数的对象引用变量。

public class Animal{

       public void setSound(Animal a) {

          if (a instanceof Dog) {         // Checking animal type

                System.out.println("Bark");

             }

         else if (a instanceof Cat) {     // Checking animal type

                 System.out.println("Meowww");

             }
         }
      }
邓元白
2023-03-14

有一天我在SO上看到的,作为为什么使用getter和setters的答案(由@ChssPly76编写)

因为从现在开始的2周(几个月、几年),当您意识到您的setter需要做的不仅仅是设置值时,您还会意识到该属性已直接在238个其他类中使用:-)

还有很多优点:

  1. getter和setter可以在其中进行验证,字段不能
  2. 使用getter可以得到想要的类的子类。
  3. getter和setter是多态的,字段不是
  4. 调试可以简单得多,因为断点可以放在一个方法中,而不是靠近该给定字段的许多引用。
  5. 它们可以隐藏实现更改:

以前:

private boolean alive = true;

public boolean isAlive() { return alive; }
public void setAlive(boolean alive) { this.alive = alive; }

后:

private int hp; // change!

public boolean isAlive() { return hp > 0; } // old signature 
 //method looks the same, no change in client code
public void setAlive(boolean alive) { this.hp = alive ? 100 : 0; }

编辑:当你使用Eclipse时,一个额外的新优点是你可以在字段上创建观察点,但是如果你有setter,你只需要一个断点,并且...断点(例如在setter方法中)可以是有条件的,观察点(在字段上)不能。因此,如果您想仅在< code>x=10时停止调试器,则只能在setter中使用断点。

 类似资料:
  • 问题内容: 使方法访问类中的私有变量而不是使变量成为公共变量有什么好处吗? 例如,第二种情况比第一种情况好吗? 问题答案: 我有一天在SO上看到的答案(由@ ChssPly76编写)为什么使用getter和setter 因为从现在开始的2周(月,年),当您意识到设置者需要做的不仅仅是设置值时,您还将意识到该属性已直接在238个其他类中使用:-) 还有很多优点: getter和setter 可以 在

  • 问题内容: 我当时正在上课,我想到了几个问题。 我注意到,其他类将使用的公共方法调用了一些私有方法来完成所有工作。现在,我知道OOD的原则之一就是尽可能多地私有化并隐藏所有实现细节。我不确定我是否完全理解其背后的逻辑。 我知道将字段设为私有很重要,以防止将无效值存储在字段中(这只是许多原因之一)。但是,对于私有方法,我不确定为什么它们如此重要。 例如,对于类,我们是否不能将所有实现代码都放入公共方

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 与MySQL相比,使用MySQLi有什么优势? 问题答案: 见文档: PHP的mysqli扩展是什么? mysqli扩展或MySQL改进的扩展是为了利用MySQ

  • 问题内容: 我纯粹是出于问题的速度方面而问这个问题。 在对象是私有或公共(Java)时从对象获取值之间在速度上有什么区别? 我知道我可以测试它,但是如果任何人都知道,它就不会受伤:)预先感谢! 问题答案: 公共和私有访问无非就是在编译时确定您是否有权访问变量。在运行时,它们完全相同。这意味着,如果您可以诱使JVM认为您具有访问权限(通过反射,不安全或修改字节码),则可以。公共和私人只是编译时间信息

  • 本文向大家介绍HTML5相对于HTML4有哪些优势?相关面试题,主要包含被问及HTML5相对于HTML4有哪些优势?时的应答技巧和注意事项,需要的朋友参考一下 HTML5的规范都是基于用户优先准则来编写的,贴合开发者的编码习惯,语法限制不严,代码也更为精简,更易于阅读。 功能强大,用户体验佳 HTML5视频播放起来更流畅清晰,也更省电;HTML5游戏小巧流畅,画面质量高,操作易上手;HTML5广告

  • 问题内容: 使用Executors而不是Java程序中的Thread有什么好处。 如 执行程序是否只是限制它允许一次运行的线程数(线程池)?它是否实际上将可运行对象多路复用到它创建的线程上?如果不是,那只是避免每次都必须写新的Thread(runnable).start()的一种方法? 问题答案: 是的,执行程序通常会将可运行对象多路复用到他们创建的线程上;他们将约束和管理一次运行的线程数;它们将