inner 类 是否使封装的概念失效?
Do inner classes invalidate the concept of Encapsulation?
使用 private
访问修饰符,以便我们只能在 class 中使用相应的成员。但是使用内部 classes,我们可以定义一个方法来访问外部 class 的 private
成员。这是相关代码:
import java.util.*;
import java.lang.*;
import java.io.*;
class Outer {
private int x = 1;
Inner getInner() {
Inner inner = new Inner();
return inner;
}
class Inner {
int getX() {
return x;
}
}
}
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Outer outer = new Outer();
Outer.Inner inner = outer.getInner();
System.out.println("Private x: "+inner.getX());
}
}
这不违背封装的概念吗?
"Inner" class 是 "capsule" 的一部分 - 外部 class。所以绝对没问题,它可以访问外部 class 的私有变量。封装的要点是从外部隐藏部分实现,"Inner" class 不在外部,它在 class.
内部
The private access modifier is used so that we can use the respective
member only within the class.
因为内部 class 是 class 的一部分,所以这仍然成立。对私有数据的访问被限制在内部,因此保留了封装。
此外,由于您能够修改 class 的源文件,这意味着您无论如何都可以访问其所有内部结构。
使用 private
访问修饰符,以便我们只能在 class 中使用相应的成员。但是使用内部 classes,我们可以定义一个方法来访问外部 class 的 private
成员。这是相关代码:
import java.util.*;
import java.lang.*;
import java.io.*;
class Outer {
private int x = 1;
Inner getInner() {
Inner inner = new Inner();
return inner;
}
class Inner {
int getX() {
return x;
}
}
}
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Outer outer = new Outer();
Outer.Inner inner = outer.getInner();
System.out.println("Private x: "+inner.getX());
}
}
这不违背封装的概念吗?
"Inner" class 是 "capsule" 的一部分 - 外部 class。所以绝对没问题,它可以访问外部 class 的私有变量。封装的要点是从外部隐藏部分实现,"Inner" class 不在外部,它在 class.
内部The private access modifier is used so that we can use the respective member only within the class.
因为内部 class 是 class 的一部分,所以这仍然成立。对私有数据的访问被限制在内部,因此保留了封装。 此外,由于您能够修改 class 的源文件,这意味着您无论如何都可以访问其所有内部结构。