当前位置: 首页 > 面试题库 >

私有方法优于公共方法

秦俊豪
2023-03-14
问题内容

我当时正在StringTokenizer.java上课,我想到了几个问题。

我注意到,其他类将使用的公共方法调用了一些私有方法来完成所有工作。现在,我知道OOD的原则之一就是尽可能多地私有化并隐藏所有实现细节。我不确定我是否完全理解其背后的逻辑。

我知道将字段设为私有很重要,以防止将无效值存储在字段中(这只是许多原因之一)。但是,对于私有方法,我不确定为什么它们如此重要。

例如,对于StringTokenizer类,我们是否不能将所有实现代码都放入公共方法中?因为这些方法的API(即调用这些公共方法的规则)保持不变,这对使用这些方法的类有何影响?我能想到私有方法为何有用的唯一原因是,它可以帮助您避免编写重复的代码。例如,如果所有公共方法都执行相同的操作,则可以声明一个私有方法来执行此任务,并且可以由公共方法使用。

另一个问题,用私有方法而不是公共方法编写实现有什么好处?

这是一个小例子:

public class Sum{

    private int sum(int a, int b){
        return a+b;
    }

    public int getSum(int a, int b){
        return sum(a,b);
    }
}

VS …

public class Sum{

    public int getSum(int a, int b){
        return a+b;
    }
}

第一个样本如何更有益?


问题答案:

为了添加某些内容,可以始终安全地更改私有方法,因为您确定只能从自己的类中调用该方法,所以没有外部类可以调用私有方法(它们甚至看不到)。

因此,拥有私有方法始终是一件好事,因为您知道更改它没有问题,即使您可以安全地向该方法添加更多参数。

现在想想一个公共方法,任何人都可以调用该方法,因此,如果添加/删除参数,则还需要更改对该方法的所有调用。



 类似资料:
  • 问题内容: 将方法标记为程序包专用类是否有所不同? 之间和此处的可见性是否有实际差异? 问题答案: 如果该类不会被另一个更可见的子类扩展,则唯一的区别是 intent的清晰度* 。将所有方法包都声明为私有,使以后的读者更加难以确定同一包中的其他类将调用哪些方法。 作为我的设计解决方案,这没有多大意义,但是从技术上来说还是有可能的。

  • 我有一个关于静态方法访问的问题。我有一个类,其中有4个静态方法。如代码所示: } 我正在从下面的代码调用来自onLoadShipperDetailsListCtrl()的setSortingEnable()方法: } 因此,如果我从其他类调用setSortingEnabled()方法,我会认为它是公共的,而其他方法是私有的,但它会给我一个错误:Java . lang . nosuchmethode

  • 我有一节课: 在正常使用中,该类的行为与您预期的一样。方法和获取并设置复合列表。然而,我使用这个类作为一个对象,在使用JAX-WS构建的web服务中传递。当JAX-WS编译器看到这个类时,它会忽略和访问器,XSD中出现的唯一属性是。 在一天的大部分时间里,我的头撞在墙上,我决定尝试将私有方法的名称改为,突然间一切都如你所料。JAX-WS为属性创建了正确的模式。 似乎正在发生的事情是,JAX-WS看

  • 简介 框架中内置封装了一些公共函数,开发者在实际业务中可以直接使用,无需重复封装。其中包括: 协程函数 数组函数 目录(文件夹)函数 环境函数 文件函数 文件系统函数 对象函数 PHP 助手函数 字符串函数 系统函数 XML 函数 通用函数 协程函数 创建协程Swoft 框架中不能使用 Swoole 提供的 go 函数创建协程,否则会造成请求和上下文丢失最终导致一些不可预估的问题。 Swoft 拥

  • 我试图编写一个测试来比较字符串的相等性。 下面是应该测试的类的代码片段 这是一个测试类 正如您所看到的,我想测试公共方法,它在同一个类中调用私有方法。这个想法是,我想为私有方法创建一个模拟对象,无论何时从公共方法调用它,它都应该返回常量值 但是它返回,而不是从私有方法返回。 null

  • 我想让你问几个问题,向你请教: 我想测试我的公共方法(我使用Spring Boot、Mockito、JUnit): 非常感谢你所有的提示! 向马修问好