【问题标题】:Scoping variables in a class类中的范围变量
【发布时间】:2013-10-31 01:03:10
【问题描述】:

在方法中,我们可以创建一个作用域,来限制对某些变量的访问。

void func() {
    {
        int num = 3;
    }
    // num is not accessible here
}

在一个类中,我们如何创建一个范围(或类似的结构),使得某些字段只能通过某些方法访问?

class MyClass {
    private String myHeart = "pure";
    void method_friendly {
        // should able to access myHeart
    }

    // ---------- methods under this line should not access myHeart

    void method_evil {
        // please don't touch myHeart
    }
}

【问题讨论】:

  • 一个问题。在什么情况下,这样的东西有用?
  • 这确实需要分解成更多的类,带有私有字段。内部类不会这样做。
  • @Christian,我知道这可能不是一个好的设计。但我有时会遇到这样的情况。例如,某些字段对结构的完整性至关重要。我只希望某些方法能够改变它们。原因(1)我自己更清楚维护,(2)其他方法在被子类覆盖后可能会破坏它的完整性。
  • @SeanOwen, myHeart 可以说比私有字段更“私有”。我不想创建另一个类,这样我就必须以某种方式公开它,因为一个类只能是公共的或 /*package*/。我正在考虑做内部阶级。为什么说不可能呢?
  • @SeanOwen,我做了一些试验。我猜为什么内部类不起作用,因为(1)如果内部类没有被初始化,外部类不能访问它,(2)如果内部类已经初始化,外部类甚至可以访问它的私有成员.

标签: java class variables scope


【解决方案1】:

您可以做的一件事是使用您希望一切都能够使用的方法创建一个基类,然后创建能够使用这些方法和一些特殊方法的派生类。

【讨论】:

  • 你的意思是有基类和扩展子类吗?我尝试将这两个类放在一个文件中,文件名为“SubClass.java”。这有一些问题,因为我无法将 SuperClass 设为私有。如果 SuperClass 中的方法必须返回 this。它可能会导致 ClassCastException。
【解决方案2】:

您可以编写一个抽象类并声明您认为重要且应该能够访问某些字段的方法。你可以声明你的变量private。然后你可以编写任何子类,如果没有mutatter方法,这些类将无法改变原始字段。

【讨论】:

    猜你喜欢
    • 2021-02-08
    • 1970-01-01
    • 2014-03-21
    • 2022-01-11
    • 2011-05-21
    • 2013-07-28
    相关资源
    最近更新 更多