gpt4 book ai didi

java - 如何在内存级别通过类的成员函数访问类的私有(private)成员?

转载 作者:行者123 更新时间:2023-11-29 04:46:34 27 4
gpt4 key购买 nike

class TestMemberOuter1{
private int data=30;
class Inner{
void msg(){System.out.println("data is "+data);}
}

void display(){
Inner in=new Inner();
in.msg();
}
public static void main(String args[]){
TestMemberOuter1 obj=new TestMemberOuter1();
obj.display();
}
}

为什么内部类可以访问外部类的私有(private)成员?

我想知道什么实现[在较低级别(可能在内存级别或特定于 java 实现或任何其他不确定)] 能够在 java 中实现这种行为。

最佳答案

我不认为你不需要任何内存级别的修改或逻辑实现来实现这个,我也不认为 java 在内存级别有任何巨大的代码逻辑来实现相同的。

内存与它无关。 private、public和protected只是一个访问过滤器,无论是private、public还是protected,所有这些变量都将驻留在为对象分配的同一内存中。

私有(private)、公共(public)或 protected 变量没有不同的内存分配。它们最终都是同一对象的属性。

那编译器怎么处理这个???

它比那更简单。

这些访问过滤器清楚地告知他们应该被允许访问的上下文。

私有(private):仅在类中:)每当编译器发现在类之外的任何地方访问被证明的变量时,它都会标记错误,就是这样。

protected :同一包中的所有类:)每当编译器看到 protected 变量在包外的任何地方被访问时,它都会标记错误 Thats all。

公共(public):所有人都可以访问 :) 没有标志。

记住在上下文之外访问变量会导致编译器错误而不是运行时错误??出于同样的原因。

背后不需要庞大的逻辑,只需保留私有(private)变量、 protected 变量和公共(public)变量的列表并检查它们的用法是否合适即可。

编辑根据您更新的问题“为什么内部类能够访问外部类的私有(private)成员?”

从我上面解释的相同类比得出结论,允许在类中的任何地方访问私有(private)变量。

现在你的内部类在哪里声明?作为外部类本身的一部分不是吗?因此,当您在内部类内部访问外部类的私有(private)变量时,编译器没有问题,因为您的内部类本身位于外部类中。

我希望我的回答有点道理 :) 编码愉快。

关于java - 如何在内存级别通过类的成员函数访问类的私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36884074/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com