java - 封装和抽象差异借助 Java 中的示例

标签 java

我知道我的问题将在发布后立即关闭,但让我告诉你,我一直在该站点上搜索 Java 示例方面的明显差异。请不要急于结束问题。

我写了以下内容:

public class Bank {
public String name="XXX Bank";
private int noOfCust;

public int getNoOfCust() {
 return getNoOfCusts() + 2;
}
public void setNoOfCust(int noOfCust) {
if(noOfCust > 0)
{
this.noOfCust = noOfCust;
}
}

private int getNoOfCusts()
{
noOfCust = 100;
return noOfCust;
}
}

此处,“noOfCust 是被隐藏的数据”。我不会通过引入 private getNoOfCusts() 来公开实现部分。所以我相信这是封装,因为我已经将所有细节捆绑在一个类中并且也隐藏了数据。

问题一:如果这个强封装呢?如果不是,我如何改进它以使其被强封装?

问题 2: 抽象意味着完全隐藏实现。所以我上面做的是抽象?

我出于沮丧而发布了这个问题,因为我已经向面试官提供了上述解释,面试官告诉我,这不是正确的意思。

P.S:请根据上面的例子回答。我不需要实时示例或假设。

最佳答案

选择必要的属性并隐藏不需要的细节是抽象。例如考虑人。 Person 具有 eyes、eyeColor、skinColor 属性。但是如果他去 Bank,那么 Bank 会做他的抽象并且不考虑这些 Person 的属性但是它选择 name,address,phone_number。这是抽象。你误会了。

封装简单来说就是将对象的状态(属性)和行为(方法)绑定(bind)在一起。如果您正在创建类,那么您就是在进行封装。

来自 wiki :在 C++、Object Pascal 或 Java 等面向对象的编程语言中,抽象的概念本身已成为一种声明性陈述——使用关键字 virtual(在 C++ 中)或 abstract(在 Java 中)。在这样的声明之后,程序员有责任实现一个类来实例化声明的对象。

关于java - 封装和抽象差异借助 Java 中的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12172084/

相关文章:

java - 追加对象现有文件

java - 如果 int 变量等于 ArrayList 中的位置,则分配 ArrayList 元素

java - 是否可以让 SWT 使用 OS X native 选项卡?

java - 如何允许用户从 JTextArea 复制、剪切和粘贴选定的单词?

java - Intent .CATEGORY_APP_CALCULATOR : ActivityNotFoundException

java - 简单的 JSON 字符串查询

java - Ant Junit 测试陷入困境 - 需要总结

java - Java中如何从请求中只获取一个String参数?

java - 改进 Java 中将 Json 转换为 XML 或反之亦然的程序

java - 将 dropwizard 项目部署到 heroku 时 yaml 中的 "Unrecognized Field: http"