【问题标题】:Can this be called an Encapsulation?这可以称为封装吗?
【发布时间】:2015-03-15 07:21:34
【问题描述】:

我是封装新手。

我编写了一个简单的 java 程序,可以识别它是奇数还是偶数,我尝试对它使用封装。我知道封装使用 get 和 set 方法,但我是这样做的。

还算封装吗?

主要

import java.util.Scanner;

public class Implement
{
    public static void main(String[]args)
    {
        Scanner inp = new Scanner(System.in);
        System.out.println("Please enter number: ");
        int ent = inp.nextInt();
        Practice pract = new Practice();
        pract.oddeven(ent);
    }
}

实践课

public class Practice
{
    public void oddeven(int a)
    {
        do
        {
            if(a>=2)
            {
                a-=2;    
            }   
        }
        while(a>1);

        if(a==1)
        {
            System.out.println("This number is Odd.");
        }
        else if(a==0)
        {
            System.out.println("This number is Even.");
        }
    }
}

【问题讨论】:

  • 处理代码格式化(大多数编辑器支持各种“自动格式化”),因为缩进效果不佳会使代码难以阅读。
  • 格式化了代码。修正了标题的措辞。
  • 如果一个数不能被二整除,那么它就是奇数。您可以使用模运算符进行检查:a % 2 == 1 表示它很奇怪。或者您可以使用除法(a / 2) * 2 != a 表示它很奇怪。您可以使用按位与运算符来使用数字的二进制表示:a & 1 == 1 表示它是奇数。

标签: java oop encapsulation


【解决方案1】:

还算封装吗?

您的类没有内部状态,因此没有要隐藏的内部状态。这意味着“封装”(即隐藏内部状态)完全没有实际意义。


我还应该指出:

  • 您的oddeven 方法有问题。它不会打印小于零的数字。

  • 这是一种非常低效的奇数或偶数测试方法。

  • 执行计算并将结果打印到标准输出的方法不如执行相同计算并返回结果的方法有用、灵活和可重用

  • 您的代码中有许多 Java 样式违规:

    • 您违反了 Java 标识符规则。方法名称oddeven 应该是oddEven,因为“oddeven”不是英文单词。
    • 你的缩进全搞砸了。
    • 您在标记之间使用空格是错误的。

【讨论】:

    【解决方案2】:

    封装适用于对象级别,并且特定于方法和字段。您只有一个作用于输入参数的方法,与封装无关。

    Oracle 对数据encapsulation 的定义是:“隐藏内部状态并要求通过对象的方法执行所有交互称为数据封装——面向对象编程的基本原则。”

    【讨论】:

      【解决方案3】:

      要将其封装在方法中,您必须隐藏正在发生的事情。这就是封装概念的真正本质。这是通过使用两种方法完成的:

      Getter : 获取主类的值

      Setter : 在 Encapsulation 类中设置值(这里使用私有变量)。 以下代码将显示使用封装对您的修改:

      public class implement
      {
          public static void main(String[]args)
          {
              Practice pract = new Practice();
              Scanner inp = new Scanner(System.in);
              System.out.println("Please enter number: ");
              int ent = inp.nextInt();
              pract.setNum(ent);
              if(pract.getNum() == 1){
                  System.out.println("This number is Odd");
              }else if (pract.getNum() == 0){
                  System.out.println("This is Even");
              }
          }
      }
      

      实践课:

      public class Practice
          {
              private int x;      
      
              public int getNum(){
                  return x;
              }
              public void setNum(int a){
                  x = a;
                  do{if(x >= 2)
                      x -=2;
                  }while(x>1);
      
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-24
        • 2011-09-27
        • 2015-12-27
        相关资源
        最近更新 更多