有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    封装是信息隐藏。它可以通过java中的访问修饰符来实现 (私有、公共、受保护、默认)因此,通过使用访问修饰符,我们可以对变量和方法的可见性施加限制

    封装还将与实体相关的函数和变量包装到单个类中

    Getter和setter方法用于从外部访问类的实例变量,从而保护对实例变量的直接访问

  2. # 2 楼答案

    基本思想是为类的用户提供所有必要的操作(类方法),而不是让用户完全访问数据(类变量)。这种技术可以防止类变量的任何意外修改和数据不一致。例如:假设你有一个叫Student的班

    Class Student {
    
           private:
                int id; 
                string name;
           public:
                SetStudenDetails( int i, string n);
                PrintStudentDetails();
         };
    

    使用Get方法可以确保类的用户同时提供名称和id

    我建议您阅读TimothyBudd的面向对象编程书

  3. # 3 楼答案

    假设我们都为同一个项目工作,首先您为一个类编写了代码,然后我在程序中使用了您的类。后来,您不喜欢该类的行为方式,因为它的一些实例变量(由我在代码中)被设置为您没有预料到的值。他们的代码显示了您代码中的错误。(放松点,我不会那样做的,别担心。)因为它是一个Java程序,所以您应该能够发布一个新版本的类,我可以在我的程序中替换它,而无需更改我自己的任何代码

    上面的场景强调了面向对象(OO)的两个优点:灵活性和可维护性。但这些好处不会自动产生。你必须做点什么。您必须以支持灵活性和可维护性的方式编写类和代码。仅仅因为Java支持OO概念,它就不能为您编写代码。可以吗??例如,假设您使用公共实例变量创建类,而其他程序员直接设置实例变量,如下代码所示:

    public class BadExample {
    public int size;
    public int weight;
    ...
    }
    public class AnotherBadExample {
    public static void main (String [] args) {
    BadExample b = new BadExample ();
    b.size = -5; // Legal but bad!!
    }
    }
    

    现在回到一段之前我们讨论过的场景。BadExample是您的类,另一个BadExample是我的代码。我修改了您的一个变量,它有助于我的代码逻辑,但这完全改变了类的工作方式。现在你有麻烦了。你打算如何改变你的类,这样就没有人可以直接改变你的值(就像我在代码中所做的那样)?您唯一的选择是在类中编写一个方法say setSize(int newVal),然后将变量size的访问修饰符更改为private。这将确保您在有人试图为您不想要的大小变量设置值时处理实例,同时确保没有人可以直接访问该大小变量并弄乱您的代码

    但是,不幸的是,这样做,你破坏了我的代码。如果我试图编译我的另一个BadExample类,我将得到错误,因为size变量对我来说不再可见

    我们现在如何处理这种情况?最好的方法是:不要在任何人都可以修改公共变量的地方编写这样的代码

    封装的一个关键好处是能够在不破坏使用您的代码的所有其他人的代码的情况下对代码进行更改您应该始终隐藏实现细节。要详细说明,必须始终将变量设置为私有,然后设置一组其他人可以用来访问变量的公共方法。由于这些方法是公共的,任何人都可以访问它们,但由于它们在您的类中,您可以确保代码以最适合您的方式工作。因此,在需要修改代码的情况下,只需修改方法即可。没有人会受到伤害,因为我只是在代码中使用了你的方法名,而你方法中的代码并没有让我太烦恼

    如果您想要可维护性、灵活性和可扩展性(我想您确实需要),那么您的设计必须包含封装。你是怎么做到的? •保护实例变量(使用访问修饰符,主要是私有的)。 •公开访问器方法,并强制调用代码使用这些方法,而不是直接访问实例变量。 •对于方法,使用set和get的JavaBeans命名约定

    我们称访问方法为getter和setter,尽管有些人更喜欢使用更奇特的术语accessor和mutator。(就我个人而言,我将使用术语getter和setter)无论您想如何称呼它们,它们都是其他程序员访问实例变量必须使用的方法。它们看起来很简单,如果您一直在编写java代码,那么您可能永远都在使用它们:

    public class GoodExample {
    // protect the instance variable only an instance of your class can access it
    private int size;
    // Provide public getters and setters
    public int getSize() {
    return size;
    }
    public void setSize(int newSize) {
    size = newSize;
    }
    }
    

    您现在可能在嘀咕,拥有不做任何事情而只设置或获取值的方法有什么好处。我会的而是有一个公共变量。如果你这样做了,请转到封装下的第一段,重新阅读整个内容。如果您没有这样做,而是问我,我们应该在setSize()方法中使用的验证代码在哪里,以确保没有人将其修改为无效值,我的朋友,这只是一个示例类。我让你们思考一下实施需要如何进行。至少你不会因为像我这样的人和你一起编码或者更糟的事情而在意外的冲击中受到伤害

    参考:http://wiki.answers.com/Q/What_is_encapsulation_and_why_is_encapsulation_important_in_java_programming