ohs*_*kay 7 java inner-classes
我不确定我的问题标题是否恰当地描述了我的情况,所以如果不是,我会道歉!无论如何,假设我有以下代码片段(可见性如上所述):
public class ChildClass extends ParentClass {
// more code
private void myMethod() {
MyClass mine = new MyClass() {
public void anotherMethod() {
// insert code to access a method in ParentClass
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
anotherMethod()中的代码是否可以访问ParentClass中的受保护方法?如果是这样,怎么办呢?
我尝试过像......
(ParentClass.this).parentMethod();
Run Code Online (Sandbox Code Playgroud)
......但显然由于范围问题,它不起作用.
编译好:
class MyClass {
}
class ParentClass {
protected void parentMethod() {
}
}
class ChildClass extends ParentClass {
private void myMethod() {
MyClass mine = new MyClass() {
public void anotherMethod() {
parentMethod(); // this works
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
非静态内部类可以访问封闭类的所有方法,就好像它是自己的方法一样:
public class Test {
public int getOne() {
return 1;
}
public class Inner {
public int getEnclosingOne() {
return getOne(); // this works...
}
}
}
Run Code Online (Sandbox Code Playgroud)
静态内部类不能,因为静态内部类不绑定到父类的实例.这只能在封闭类上调用静态方法.
至于考虑继承的方法,非静态内部类中的方法可以使用封闭(外部)类的所有方法.
有趣的部分Test2.super.getOne()确实从中得到了getOne()Test2.super,这是一个Test.这就像Test2将访问该方法一样,即使用super前缀Test2来表示您正在访问外部类的命名空间.
public class Test2 extends Test {
public int getInnerOuterParentOne() {
Inner2 inner2 = new Inner2();
return inner2.getOuterParentOne();
}
public int getInnerOuterOne() {
Inner2 inner2 = new Inner2();
return inner2.getOuterOne();
}
public int getOne() {
return 2;
}
public class Inner2 {
public int getOuterOne() {
return getOne();
}
public int getOuterParentOne() {
return Test2.super.getOne();
}
}
public static void main(String[] args) {
Test2 test2 = new Test2();
System.out.println(test2.getInnerOuterOne()); // 2
System.out.println(test2.getInnerOuterParentOne()); // 1
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9482 次 |
| 最近记录: |