//外部类
class Outer
{
//外部类成员函数
public void method()
{
final int x = 2;//局部变量,生命周期短,加上final 保证变量的生命最长
//内部类
class Inner
{
public void show()//成员函数,需要对象调用
{
System.out.println("inner show"+x);
}
}
//定义内部类对象
Inner i = new Inner();
//调用内部类方法
i.show();
//调用外部类的function()方法,这里编译失败
function(i);
}
//外部类的function()方法
public void function(Inner i)
{
i.show();
}
}
//程序入口
class InnerClass3
{
public static void main(String[] args)
{
//定义外部类对象
Outer o = new Outer();
//调用外部类方法
o.method();
}
}
请高手帮忙看一下,谢谢
作者: 张宁 时间: 2013-3-12 00:21
class Outer<Inner> {
final int x = 2;
public void method() {
final int x = 2;
Inner i = new Inner();
i.show();
function(i);
}
public void function(Inner i) {
i.show();
}
class Inner {
public void show() {
System.out.println("inner show" + x);
}
}
}
class MaxMin {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
复制代码
朋友你的代码实在是太乱了,我给你整理了一下,可以运行了,我不知道你在想什么,我把你的代码该的可以运行了,结果估计也是你想要的,如果是如此,那么我告诉你,你把内部类定义在了外部类的方法里边,然后又在内部类里边又new了一个这个类本身去调用外部类的另一个一个方法,这个new的类能找到这个方法吗? 你外部类的函数的参数是一个内部类,这个内部类在哪里,在外部类的另一个方法中定义的,你觉得他能找到吗?我不知道你是什么逻辑。我也不知道你想验证什么?给你改了一下。也不知道是不是你想要得结果。希望能帮到你。作者: 张卫刚 时间: 2013-3-12 00:21
//外部类
class Outer
{
//外部类成员函数
public void method()
{
final int x = 2;//局部变量,生命周期短,加上final 保证变量的生命最长
//内部类
class Inner
{
public void show()//成员函数,需要对象调用
{
System.out.println("inner show "+x);
}
}
//定义内部类对象
Inner i = new Inner();
//调用内部类方法
i.show();
//调用外部类的function()方法,这里编译失败
function(i);
}
//外部类的function()方法
public void function(Inner i)//肉部类外面就不识别,没解决了
{
i.show();
}
}
//程序入口
class InnerClass3
{
public static void main(String[] args)
{
//定义外部类对象
Outer o = new Outer();
//调用外部类方法
o.method();
}
}作者: scott0610 时间: 2013-3-12 00:27
Inner是一个局部内部类,局部内部类仅在该方法里有效。
因此你的 public void function(Inner i)这方法不能通过编译。Inner找不到,或者没定义。这里编译通不过,当然 function(i);这句代码同样不能通过编译。
为了让程序正常运行,我修改了一下你的代码:
// 外部类
class Outer {
// 内部类
class Inner {
final int x = 2;// 局部变量,生命周期短,加上final 保证变量的生命最长
好像不能达到你想要的答案吧,因为局部内部类的作用域问题。
public void function(Inner i)在定义方法的时候,无法定义Inner这个类型。作者: 刘松老师 时间: 2013-3-12 09:45
Inner是一个局部内部类,局部内部类的作用域仅在它所在的函数内有效,所以当你调用外部类function(i)函数时,因为 public void function(Inner i){ i.show();}的参数是Inner对象,已经超出了它的作用域,所以会出现编译异常,建议你可以使用MyEclipse或者Eclipse工具试试看,会提示你Great class 'Inner',其实就是找不到Inner类,把Inner改成成员内部类就好了,这是我改的:
package com.test;
public class Test11{
public static void main(String[] args) {
// 定义外部类对象
Outer o = new Outer();
// 调用外部类方法
o.method();
}
}
class Outer {
// 外部类成员函数
public void method() {
// 定义内部类对象
Inner i = new Inner();
// 调用内部类方法
i.show();
// 调用外部类的function()方法,这里编译失败
function(i);
}
// 内部类
class Inner {
final int x = 2;// 局部变量,生命周期短,加上final 保证变量的生命最长
public void show()
{
System.out.println("inner show=" + x);
}
}
// 外部类的function()方法
public void function(Inner i) {
i.show();
}
} 作者: 曹玉龙 时间: 2013-3-12 20:58
大家对出错的原因给出了解释,内部类的作用域使它无法直接被外部调用.
我通过在网上查资料,发现了一种用接口访问局部内部类的方法,下面是这个例子的改造后的代码,供和我一样的新手参考.
这个贴子将设置为"已解决".谢谢大家积极帮忙,版主的加分也是及时的鼓励,.