【问题标题】:How to access private data member outside the class?如何访问类外的私有数据成员?
【发布时间】:2014-04-03 06:02:47
【问题描述】:

我正在尝试在外部类之外访问内部类的私有数据成员。

请帮帮我?

【问题讨论】:

    标签: java


    【解决方案1】:

    你不知道 - 这就是隐私的全部意义。

    当然,内部类可以通过属性公开数据:

    public class Outer {
        public class Inner {
            private final String name;
    
            public Inner(String name) {
                this.name = name;
            }
    
            public String getName() {
                return name;
            }
        }
    }
    
    public class Other {
        public void foo() {
            Outer outer = new Outer();
            Outer.Inner inner = outer.new Inner("Foo");
            // Can't access inner.name here...
            System.out.println(inner.getName()); // But can call getName
        }
    }
    

    ...但是如果内部类想要保持私有,那么您不应该尝试访问它。

    【讨论】:

    • 这样设计有什么好处吗?我的意思是,如果它是类的private,为什么他们允许在它之外访问它(即使它是一个 inner 类)..
    • Java 是一种完全面向对象的编程语言。换句话说,数据隐藏,封装是OOP中的一个主要特性。最佳做法是将所有类属性设置为私有,并将所有方法公开,包括访问这些私有属性的 getter setter 方法。
    • @Nadun:不清楚你在回复什么,但你不只是公开所有方法...... Maroun 的评论(我相信)是对我现在对他的评论的回复- 删除答案,大意是内部类的私有成员可以被它们的封闭类访问。
    • 我只是解释@Maroun的问题。
    • @Nadun:不幸的是,我认为您错过了问题的上下文。但同样,我认为建议人们公开所有方法并不是一个好主意。
    【解决方案2】:

    在内部类中为私有变量创建公共 getter setter 方法。然后创建一个对象并调用它们来访问私有数据。您不能直接访问私人数据。

    【讨论】:

      【解决方案3】:

      您无法访问私人数据。如果您有其他访问它的想法,请使用返回该私有数据的公共 getter 方法。

      【讨论】:

        【解决方案4】:

        您可以使用 getter 方法 ex 访问私有数据成员

        package pack;
        
        import java.io.ObjectInputStream.GetField;
        
        public class abc {
            private int num = 2;
        
            public int getNum() {
                return num;
            }
        
            public void setNum(int num) {
                this.num = num;
            }
        
        }
        
        class otherClass {
            public static void main(String[] args) {
                abc obj = new abc();
                System.out.println(obj.getNum());
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2020-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-27
          • 1970-01-01
          • 2016-01-20
          • 1970-01-01
          • 2023-03-22
          相关资源
          最近更新 更多