Java 中本地内部 类 中的访问方法
Access methods within local inner classes in Java
有什么方法可以访问 Java 中局部内部 类 的方法吗?以下代码是我之前尝试过的示例代码。据此,访问 mInner()
方法的机制是什么?
class Outer{
int a=100;
Object mOuter(){
class Inner{
void mInner(){
int y=200;
System.out.println("mInner..");
System.out.println("y : "+y);
}
}
Inner iob=new Inner();
return iob;
}
}
class Demo{
public static void main(String args[]){
Outer t=new Outer();
Object ob=t.mOuter();
ob.mInner(); // ?need a solution..
}
}
local class 的作用域规则与变量的作用域规则几乎相同,即它被限制在封闭块内。
与无法从 main
访问变量 iob
的方式相同,您无法从 main
.
访问本地 class Inner
在封闭块之外,本地 class 和匿名 class 之间没有区别。两者都无法访问。不同之处在于 在 封闭块中,本地 class 可以通过名称访问,如果您需要重复访问它特别有用,例如创建多个实例。
与封闭块外的 local/anonymous class 交互的唯一方法是通过任何超级 class 或相关 class 实现的接口。
正如 ILikeTau 的评论所说,您无法访问您在方法中定义的 class。您可以在方法之外定义它,但另一种可能性是定义一个 interface
(或抽象 class)。然后代码仍然在你的方法中,并且可以访问方法中定义的 final
变量和参数(如果你将整个 class 移到外面,你就不能这样做)。类似于:
class Outer {
int a = 100;
public interface AnInterface {
void mInner(); // automatically "public"
}
AnInterface mOuter() { // note that the return type is no longer Object
class Inner implements AnInterface {
@Override
public void mInner() { // must be public
int y = 200;
System.out.println("mInner..");
System.out.println("y : " + y);
}
}
Inner iob = new Inner();
return iob;
}
}
class Demo {
public static void main(String[] args) { // the preferred syntax
Outer t = new Outer();
Outer.AnInterface ob = t.mOuter();
ob.mInner();
}
}
注:未测试
请注意,return 类型和 ob
类型已从 Object
更改。那是因为在 Java 中,如果你将某物声明为 Object
,你只能访问为 Object
定义的方法。编译器必须在编译时(而不是在 运行 时)知道你的对象 ob
有一个 mInner
方法,并且它不能告诉它是否唯一知道的是这是一个 Object
。通过将其更改为 AnInterface
,编译器现在知道它有一个 mInner()
方法。
要访问内部 class 创建内部对象 class..
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
来自你的例子
outer t=new outer();
outer.inner inner1=t.new inner();
希望这对你有帮助...
有什么方法可以访问 Java 中局部内部 类 的方法吗?以下代码是我之前尝试过的示例代码。据此,访问 mInner()
方法的机制是什么?
class Outer{
int a=100;
Object mOuter(){
class Inner{
void mInner(){
int y=200;
System.out.println("mInner..");
System.out.println("y : "+y);
}
}
Inner iob=new Inner();
return iob;
}
}
class Demo{
public static void main(String args[]){
Outer t=new Outer();
Object ob=t.mOuter();
ob.mInner(); // ?need a solution..
}
}
local class 的作用域规则与变量的作用域规则几乎相同,即它被限制在封闭块内。
与无法从 main
访问变量 iob
的方式相同,您无法从 main
.
Inner
在封闭块之外,本地 class 和匿名 class 之间没有区别。两者都无法访问。不同之处在于 在 封闭块中,本地 class 可以通过名称访问,如果您需要重复访问它特别有用,例如创建多个实例。
与封闭块外的 local/anonymous class 交互的唯一方法是通过任何超级 class 或相关 class 实现的接口。
正如 ILikeTau 的评论所说,您无法访问您在方法中定义的 class。您可以在方法之外定义它,但另一种可能性是定义一个 interface
(或抽象 class)。然后代码仍然在你的方法中,并且可以访问方法中定义的 final
变量和参数(如果你将整个 class 移到外面,你就不能这样做)。类似于:
class Outer {
int a = 100;
public interface AnInterface {
void mInner(); // automatically "public"
}
AnInterface mOuter() { // note that the return type is no longer Object
class Inner implements AnInterface {
@Override
public void mInner() { // must be public
int y = 200;
System.out.println("mInner..");
System.out.println("y : " + y);
}
}
Inner iob = new Inner();
return iob;
}
}
class Demo {
public static void main(String[] args) { // the preferred syntax
Outer t = new Outer();
Outer.AnInterface ob = t.mOuter();
ob.mInner();
}
}
注:未测试
请注意,return 类型和 ob
类型已从 Object
更改。那是因为在 Java 中,如果你将某物声明为 Object
,你只能访问为 Object
定义的方法。编译器必须在编译时(而不是在 运行 时)知道你的对象 ob
有一个 mInner
方法,并且它不能告诉它是否唯一知道的是这是一个 Object
。通过将其更改为 AnInterface
,编译器现在知道它有一个 mInner()
方法。
要访问内部 class 创建内部对象 class..
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
来自你的例子
outer t=new outer();
outer.inner inner1=t.new inner();
希望这对你有帮助...